Java 线程池 四种创建方式
来源:互联网 发布:php数据库教程 编辑:程序博客网 时间:2024/05/29 09:40
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
按顺序来执行线程任务 但是不同于单线程,这个线程池只是只能存在一个线程,这个线程死后另外一个线程会补上
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
newCachedThreadPool
public static void main(String[] args) {ExecutorService cachedThreadPool = Executors.newCachedThreadPool();for (int i = 0; i < 10; i++) {final int index = i;try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}cachedThreadPool.execute(new Runnable() {public void run() {System.out.println(index);}});}}创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
这里的线程池是无限大的,当一个线程完成任务之后,这个线程可以接下来完成将要分配的任务,而不是创建一个新的线程,
java api 1.7 will reuse previously constructed threads when they are available.
newFixedThreadPool
public static void main(String[] args) {ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);for (int i = 0; i < 10; i++) {final int index = i;fixedThreadPool.execute(new Runnable() {public void run() {try {System.out.println(index);Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}});}}
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()
public static void main(String[] args) {ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);for (int i = 0; i < 10; i++) {scheduledThreadPool.schedule(new Runnable() {public void run() {System.out.println("delay 3 seconds");}}, 3, TimeUnit.SECONDS);}}
newSingleThreadExecutor
public static void main(String[] args) {ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();for (int i = 0; i < 10; i++) {final int index = i;singleThreadExecutor.execute(new Runnable() {public void run() {/*System.out.println(index);*/try {System.out.println(index);Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}});}}
按顺序来执行线程任务 但是不同于单线程,这个线程池只是只能存在一个线程,这个线程死后另外一个线程会补上
0 0
- Java 线程池 四种创建方式
- java创建线程的四种方式
- java创建线程的四种方式
- java线程池的四种创建方式
- java并发——四种创建线程方式
- Java四种线程池的弊端,和如何自己通过ThreadPoolExecutor的方式创建线程池
- Java线程创建方式
- Java并发学习之四种线程创建方式的实现与对比
- java生成线程的四种方式
- java创建线程池的四种方法
- java创建对象的四种方式
- Java 创建对象的四种方式
- Java创建对象的四种方式
- Java创建对象的四种方式
- Java 创建对象的四种方式
- java创建对象的四种方式
- Java 创建对象的四种方式
- java创建对象的四种方式
- javascript 异步编程
- DWORD Shoot利用Crt库free函数
- 10min了解ContentProvider
- C语言入门与进阶书籍汇总
- 遗传算法改进
- Java 线程池 四种创建方式
- oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
- DOJ Round #1 解题报告
- 学习安装单机版Hadoop记录
- centos停止运行中的wget操作
- oracle 12C RAC启动实例时报ORA-00206: error in writing (block 1, # blocks 1) of control file错误处理
- sessionFactory工厂
- 在Windows7上通过Dao安装Tensorflow-(综合已有资料和自己调试经验的总结)
- Java EE微信开发入门一+环境搭配(JDK+MyEclipse+Tomcat)