1.newFixedThreadPool:创建一个固定大小的线程池
ExecutorService threadPool= Executors.newFixedThreadPool(5);
//2.使用线程池执行任务一
for (int i=0;i<5;i++){
//给线程池添加任务
threadPool.submit(new Runnable() {
@Override
public void run() {
System.out.println("线程名"+Thread.currentThread().getName()+"在执行任务1");
}
});
}
2.newSingleThreadExecutor:创建单个线程的线程池
ExecutorService service= Executors.newSingleThreadExecutor();
for (int i=0;i<5;i++){
int finalI = i;
service.submit(()->{
System.out.println(finalI +"线程名"+Thread.currentThread().getName());//CPU只创建了1个线程,名称始终一样
});
}
3.newSingleThreadScheduledExecutor:创建执行定时任务的单个线程的线程池
ScheduledExecutorService service= Executors.newSingleThreadScheduledExecutor();
System.out.println("添加任务:"+ LocalDateTime.now());
service.schedule(new Runnable() {
@Override
public void run() {
System.out.println("执行任务:"+LocalDateTime.now());
}
},3,TimeUnit.SECONDS);//推迟3秒执行任务
4.newScheduledThreadPool:创建执行定时任务的线程池
ScheduledExecutorService service = Executors.newScheduledThreadPool(5);//5个线程
System.out.println("添加任务:" + LocalDateTime.now());
//单独方法
once(service);
public static void once(ScheduledExecutorService service) {
//service里有多个方法具体不详细阐述,看源码
service.schedule(new Runnable() {
@Override
public void run() {
System.out.println("执行任务:" + LocalDateTime.now());
}
}, 3, TimeUnit.SECONDS);//推迟3秒执行
}
5.newCachedThreadPool:带缓存的线程池,适用于短时间有大量任务的场景,但有可能会占用更多的资源;线程数量随任务量而定。
ExecutorService service= Executors.newCachedThreadPool();
//有50个任务
for(int i=0;i<50;i++){
int finalI = i;
service.submit(()->{
System.out.println(finalI +"线程名"+Thread.currentThread().getName());//线程名有多少个,CPU就创建了多少个线程
});
}
6.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定),注意此方法只有在 JDK 1.8+ 版本中才能使用
ExecutorService executorService = Executors.newWorkStealingPool();
for (int i = 0; i < 50; i++) {
int finals = i;
executorService.submit(()->{
System.out.println(finals + "线程名" + Thread.currentThread().getName());
});
}



