Java 线程池的区别

常见的Java线程池:

newCachedThreadPool:可缓存线程池

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

如果线程池中线程数量大于任务数量,会自动回收空闲线程,任务数大于线程数量时会自动创建线程;

特点:

1.线程的数量无上限(Integer.MAX_VALUE)

2.线程池中在一定时间内没有提交任务则自动回收线程,终止线程。再次提交任务会新创建线程,灵活度比较高。

3.如果任务非常多,newCachedThreadPool会一直创建线程,导致系统性能下降。

newFixedThreadPool

 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

创建指定工作线程数量的线程池,每次提交一个任务,会新创建一个工作线程,超过最大数量时,将提交的任务存到池队列中。

newSingleThreadExecutor

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
创建一个单线程化的Executor,只创建唯一的线程来完成任务,保证所有任务按顺序执行,直到此线程结束,才会创建一个新线程。保证任务

newScheduleThreadPool

 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);

创建指定大小的线程池,支持定时的周期性的执行。

//延迟1s后,3秒执行一次
public class ThreadPoolExecutorTest {
 public static void main(String[] args) {
  ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
  scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
   public void run() {
    System.out.println("delay 1 seconds, and excute every 3 seconds");
   }
  }, 1, 3, TimeUnit.SECONDS);
 }
}
//延迟3s执行;
public class ThreadPoolExecutorTest {
 public static void main(String[] args) {
  ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
  scheduledThreadPool.schedule(new Runnable() {
   public void run() {
    System.out.println("delay 3 seconds");
   }
  }, 3, TimeUnit.SECONDS);
 }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值