博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程篇六:线程池
阅读量:6578 次
发布时间:2019-06-24

本文共 3229 字,大约阅读时间需要 10 分钟。

1.固定大小的线程池

ExecutorService threadPools1=Executors.newFixedThreadPool(3);

for(int i=1;i<=10;i++){final int task=i;//循环10次,一共往线程池里面放10个任务threadPools1.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+" loop of "+task);}});}System.out.println("The task is executd completed.....");// 1.使用固定线程池threadPools1:// 输出结果: 10任务每次同时有3个线程进行处理,每个线程处理一个。直到处理完10个任务The task is executd completed.....pool-1-thread-2 loop of 2pool-1-thread-1 loop of 1pool-1-thread-3 loop of 3pool-1-thread-1 loop of 4pool-1-thread-2 loop of 5pool-1-thread-3 loop of 6pool-1-thread-1 loop of 7pool-1-thread-3 loop of 9pool-1-thread-2 loop of 8pool-1-thread-1 loop of 10
View Code

 

2.缓存线程池(池内没有固定的线程数,根据任务的多少而创建多少个线程)

ExecutorService threadPools2=Executors.newCachedThreadPool();

for(int i=1;i<=10;i++){            final int task=i;            //循环10次,一共往线程池里面放10个任务            threadPools2.execute(new Runnable() {                @Override                public void run() {                    System.out.println(Thread.currentThread().getName()+" loop of "+task);                }            });        }        System.out.println("The task is executd completed.....");               /*         * 2.使用缓存线程池threadPools2:        * 输出结果:(线程池内直接创建10个线程,分别处理10个任务 )        The task is executd completed.....        pool-2-thread-10 loop of 10        pool-2-thread-9 loop of 9        pool-2-thread-8 loop of 8        pool-2-thread-7 loop of 7        pool-2-thread-6 loop of 6        pool-2-thread-5 loop of 5        pool-2-thread-4 loop of 4        pool-2-thread-3 loop of 3        pool-2-thread-1 loop of 1        pool-2-thread-2 loop of 2        */
View Code

 

3.单线程的线程池(池内固定有一个线程,当前线程死后会自动再创建一个,始终维持1一个线程)--比如实现案例:如何实现线程死后重新启动

ExecutorService threadPools3=Executors.newSingleThreadExecutor();

for(int i=1;i<=10;i++){            final int task=i;            //循环10次,一共往线程池里面放10个任务            threadPools3.execute(new Runnable() {                @Override                public void run() {                    System.out.println(Thread.currentThread().getName()+" loop of "+task);                }            });        }        System.out.println("The task is executd completed.....");               /*         * 3.使用单一线程池 threadPools3        * 输出结果:(由单一线程逐一处理10个任务 )        The task is executd completed.....        pool-3-thread-1 loop of 1        pool-3-thread-1 loop of 2        pool-3-thread-1 loop of 3        pool-3-thread-1 loop of 4        pool-3-thread-1 loop of 5        pool-3-thread-1 loop of 6        pool-3-thread-1 loop of 7        pool-3-thread-1 loop of 8        pool-3-thread-1 loop of 9        pool-3-thread-1 loop of 10        */
View Code

 

4.关闭线程池

//等池内的任务执行完,销毁掉线程池.threadPools3.shutdown();//立即销毁掉线程池.不会等待任务是否完成threadPools3.shutdownNow();

 

5.调度线程池(定时器的线程池)

ScheduledExecutorService scheduleThreadPools=Executors.newScheduledThreadPool(3);//10s之后执行scheduleThreadPools.schedule(new Runnable() {@Overridepublic void run() {System.out.println("bombing!");}}, 10, TimeUnit.SECONDS);//固定频率的执行 10s之后执行,每个2S执行一次scheduleThreadPools.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {System.out.println("bombing!");}}, 10, 2,TimeUnit.SECONDS);

 

转载于:https://www.cnblogs.com/brant/p/6024786.html

你可能感兴趣的文章
Android 屏幕适配
查看>>
暗黑3发布!又有多少人为之疯狂
查看>>
Android 照片墙
查看>>
20140419-MCSA 2012 Server R2 Command
查看>>
WEM, Citrix 桌面虚拟化方案之神器2号
查看>>
linux档案权限和目录配置
查看>>
面见袁总
查看>>
Golang学习笔记(1)---go程序一般结构
查看>>
Linux nc (netcat) 详解
查看>>
Redis——AOF持久化
查看>>
接口测试
查看>>
两表查询-其中一表查询出的结果为条件做为主查询的条件来查询(快客密码查询)...
查看>>
C# Dictionary 的几种遍历方法
查看>>
坑爹属性之【automaticallyAdjustsScrollViewInsets】
查看>>
TinyTemplate(Velocity Plus版)即将火热推出~~~
查看>>
邮件安全
查看>>
提问帖,方便贴代码
查看>>
TypeScript中的array
查看>>
Maven最佳实践——目录的约定
查看>>
ITelephony接口和ISms接口以及AIDL
查看>>