Java线程池

一、自定义线程池集成ThreadPoolExecutor

二、JDK自带的几种线程池

1、newFixedThreadPool

  newFixedThreadPool,创建固定大小的线程池,poolCoreSize和MaxPoolSize相等,到达coreSize则将新的任务放到缓存队列,有线程执行完毕,直接去取。
  创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待 。     

2、newSingleThreadExecutor

newSingleThreadExecutor,创建一个单线程的核心池,核心池的大小和最大池大小为1。
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。示例代码如下:
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
final int index = i;
singleThreadExecutor.execute(new Runnable() {
 
@Override
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}

结果依次输出,相当于顺序执行各个任务。

3、newCacheThreadPool

 无大小限制的线程池,提交一个任务就创建一个线程执行。
 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。线程池为无限大,当执行第二个任务时第  一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。

4.newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。
延迟执行。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
       @Override
        public void run() {
        System.out.println("delay 3 seconds");
  }
  }, 3, TimeUnit.SECONDS);
周期执行
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
 
        @Override
        public void run() {
            System.out.println("delay 1 seconds, and excute every 3 seconds");
      }
      }, 1, 3, TimeUnit.SECONDS);

表示延迟1秒后每3秒执行一次。
ScheduledExecutorService比Timer更安全,功能更强大。

【参考】https://www.cnblogs.com/zhujiabin/p/5404771.html

你可能感兴趣的:(Java线程池)