Java四种线程池的使用
来源:互联网 发布:封天战神法器进阶数据 编辑:程序博客网 时间:2024/06/05 02:31
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
创建一个可缓存的线程// ExecutorService CachedPool = Executors.newCachedThreadPool();//// for (int i=0;i<1000;i++){// final int index=i;//// try {// Thread.sleep(index*10);// } catch (InterruptedException e) {// e.printStackTrace();// }//// 给线程池添加任务// CachedPool.execute(new Runnable() {// @Override// public void run() {// Log.i("打印编号",""+index);// }// });// }// }//}
线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
(2) newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。示例代码如下:
因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。
定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()
(3) newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。延迟执行示例代码如下:
ExecutorService fixedThreadPool=Executors.newFixedThreadPool(6);//// for (int i=0;i<1000;i++){// final int index =i;//// fixedThreadPool.execute(new Runnable() {// @Override// public void run() {// try {// Thread.sleep(index *1000);// } catch (InterruptedException e) {// e.printStackTrace();// }// Log.i("打印数据"," "+index);// }// });
表示延迟3秒执行。
定期执行示例代码如下:
ExecutorService singlepool =Executors.newSingleThreadExecutor();// for (int i=0;i<10;i++){// final int index =i;// singlepool.execute(new Runnable() {// @Override// public void run() {// try {// Thread.sleep(2000);// Log.i("数据打印",""+index);// } catch (InterruptedException e) {// e.printStackTrace();// }// }// });// }
表示延迟1秒后每3秒执行一次。
(4) newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。示例代码如下:
ScheduledExecutorService schemedPool =Executors.newScheduledThreadPool(5);延时操作,第一个参数是要操作的任务,第二个参数是要延迟的时间,第三个延迟的时间的单位( },3, TimeUnit.SECONDS);) schemedPool.schedule(new Runnable() { @Override public void run() { Log.i("打印","任务执行完毕"); } },3, TimeUnit.SECONDS); 定时周期性任务 第一个参数要执行的任务, 第二个参数是延迟多长时间 第三个参数是周期时间(每隔多长时间触发一次) 第四次参数是时间的单位 schemedPool.scheduleAtFixedRate(new Runnable() { @Override public void run() { Log.i("打印","我在执行中"); } },1,5,TimeUnit.SECONDS); }}
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- JAVA四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- Java四种线程池的使用
- POJ 1088滑雪
- 屏幕适配Autolayout
- HDU 1878 欧拉回路
- 棋盘游戏
- 记一次进程线程dll和MFC消息循环的系列问题
- Java四种线程池的使用
- Sharding(切片)技术(解决数据库分库一致性问题)
- C语言_在结构体中使用malloc()函数_Cplus14.10
- UVA 10916-Factstone Benchmark
- 在android应用中启动另一个非官方的应用
- [无聊]CSDN题解模板
- Open Judge 2811 熄灯问题
- 这是一个新的开始
- python 遍历目录