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);
 }
}



你可能感兴趣的:(javaSE)