转载:线程池ExecutorService_executorservice executor = executors.newcachedthre_Java小生不才的博客-优快云博客
1、缓存型线程池(CachedThreadPool)
Executors.newCacheThreadPool():可缓存线程池,先查看线程池中有没有之前创建的线程,如果有则直接使用。否则就新创建一个新的线程加入线程池中,我们经常用此类线程池来执行一些业务处理时间很短的任务。
2、demo
class Task implements Runnable {
private String name;
public Task(String name) {
this.name = name;
}
@Override
public void run() {
//实际的业务处理
System.out.println(name + "开始执行"]...");
}
}
/**
// * @param args
*/
public static void main(String[] args) throws ExecutionException, InterruptedException {
//调用工厂类的静态方法,创建线程池对象
ExecutorService executorService = Executors.newCachedThreadPool();
//调用接口实现类对象es中的方法submit提交线程任务
executorService.submit(new Task("name"));
}
3、创建方式
- Executors
- ThreadPoolExecutor
package com.atguigu.gulimall.search.thread;
import java.util.concurrent.*;
/**
*
*/
public class ThreadPoolDemo {
/**
* 线程池ExecutorService
* 1.创建方式
* a.Executors
* b.ThreadPoolExecutor
*/
public static void main(String[] args) {
/**
* 方式1
*/
//1.1.创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
// ExecutorService executorService = Executors.newCachedThreadPool();
//1.2.创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
// ExecutorService executorService = Executors.newFixedThreadPool(10);
//1.3.创建一个定长线程池,支持定时及周期性任务执行
// ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);
//1.4.创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
ExecutorService executorService = Executors.newSingleThreadExecutor();
/**
* 方式2
*/
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
5,200,10,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(10000),
Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
}
}