Java多线程--创建和使用线程池

使用线程池的目的

线程是稀缺资源,不能频繁的创建

解耦作用:线程的创建与执行完全分开,方便维护

将其放入一个池子中,可以给其他任务进行复用

优点

降低资源消耗,通过重复利用已创建的线程来降低线程创建和销毁造成的消耗。

提高相应速度,当任务到达时,任务可以不需要的等到线程创建就能立即执行。

提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅仅会消耗系统资源,还会降低体统的稳定性,使用线程可以进行统一分配,调优和监控

创建线程池的方式

 在 JDK 1.5 之后推出了相关的 api,常见的创建线程池方式有以下三种:

Executors.newCachedThreadPool():无限线程池,线程池动态扩容

Executors.newFixedThreadPool(nThreads):创建固定大小的线程池

Executors.newSingleThreadExecutor():创建单个线程的线程池

Executors.newScheduledThreadPool():定时执行的线程池

 JDK1.8新增

Executors.newWorkStealingPool(): newWorkStealingPool适合使用在很耗时的操作,但是newWorkStealingPool不是ThreadPoolExecutor的扩展,它是新的线程池类ForkJoinPool的扩展,但是都是在统一的一个Executors类中实现,由于能够合理的使用CPU进行对任务操作(并行操作),所以适合使用在很耗时的任务中

但是在阿里巴巴开发规约中对线程池的创建有以下几个强制要求:

Java多线程--创建和使用线程池

Java多线程--创建和使用线程池

可以看到规约是不允许使用Executors直接创建线程池的,而要通过ThreadPoolExecutor的方式创建

1 public static ExecutorService newCachedThreadPool() { 2 return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 3 60L, TimeUnit.SECONDS, 4 new SynchronousQueue<Runnable>()); 5 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzjsd.html