常见的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); } }