Java 创建线程池的四种方式

互联网 20-6-4

Java 创建线程池的四种方式

1、newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

2、newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

4、newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,

若无可回收,则新建线程。

package cn.qbz.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Test111907 {     public static void main(String[] args) {         ExecutorService executorService = Executors.newCachedThreadPool();         for (int i = 0; i < 10; i++) {             final int temp = i;             executorService.execute(new Runnable() {                 @Override                 public void run() {                     try {                         Thread.sleep(1000);                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                     System.out.println(Thread.currentThread().getName() + "   i=" + temp);                 }             });         }     } }     public static ExecutorService newCachedThreadPool() {         return new ThreadPoolExecutor(0, Integer.MAX_VALUE,                                       60L, TimeUnit.SECONDS,                                       new SynchronousQueue<Runnable>());     }

newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

package cn.qbz.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Test111907 {     public static void main(String[] args) {         ExecutorService executorService = Executors.newFixedThreadPool(3);         for (int i = 0; i < 10; i++) {             final int temp = i;             executorService.execute(new Runnable() {                 @Override                 public void run() {                     try {                         Thread.sleep(100);                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                     System.out.println(Thread.currentThread().getName() + "   i=" + temp);                 }             });         }     } }     public static ExecutorService newFixedThreadPool(int nThreads) {         return new ThreadPoolExecutor(nThreads, nThreads,                                       0L, TimeUnit.MILLISECONDS,                                       new LinkedBlockingQueue<Runnable>());     }

newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。

package cn.qbz.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Test111907 {     public static void main(String[] args) {         final long begin = System.currentTimeMillis();         ExecutorService executorService = Executors.newScheduledThreadPool(3);         for (int i = 0; i < 10; i++) {             final int temp = i;             final long time = begin;             executorService.schedule(new Runnable() {                 @Override                 public void run() {                     try {                         Thread.sleep(100);                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                     System.out.println(Thread.currentThread().getName() + "   i=" + temp + "   time=" + (System.currentTimeMillis() - time));                 }             }, 5, TimeUnit.SECONDS);         }     } }     public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {         return new ScheduledThreadPoolExecutor(corePoolSize);     }     public ScheduledThreadPoolExecutor(int corePoolSize) {         super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,               new DelayedWorkQueue());     }

newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,

保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

package cn.qbz.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Test111907 {     public static void main(String[] args) {         ExecutorService executorService = Executors.newSingleThreadExecutor();         for (int i = 0; i < 10; i++) {             final int temp = i;             executorService.execute(new Runnable() {                 @Override                 public void run() {                     try {                         Thread.sleep(100);                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                     System.out.println(Thread.currentThread().getName() + "   i=" + temp);                 }             });         }     } }

推荐教程:《Java教程》

以上就是Java 创建线程池的四种方式的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: java
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Servlet 的生命周期5个阶段

相关资讯