聚合全网技术文章,根据你的阅读喜好进行个性推荐
创建的线程池有哪几种方式
Java中创建线程池有以下几种方式:
ExecutorService executor = Executors.newFixedThreadPool(n);
ExecutorService executor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newCachedThreadPool();
ScheduledExecutorService executor = Executors.newScheduledThreadPool(corePoolSize);
以上都是通过工厂方法 Executors 创建的,也可以通过 ThreadPoolExecutor 类直接创建自定义的线程池。ThreadPoolExecutor 类的构造方法可以接受很多参数,包括线程池的核心线程数、最大线程数、任务队列、线程存活时间等等,具有更灵活的配置选项。
其中,corePoolSize 是指核心线程池大小,maximumPoolSize 是指线程池最大大小,keepAliveTime 是指线程空闲后的存活时间,unit 是指时间单位,workQueue 是指任务队列。任务队列可以选择使用 ArrayBlockingQueue、LinkedBlockingQueue 或 SynchronousQueue 等类型。
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(); ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
ForkJoinPool executor = new ForkJoinPool();
Executor executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
CachedThreadPoolExecutor:这是 ThreadPoolExecutor 的一种定制化实现,使用 SynchronousQueue 作为任务队列。线程池的核心线程数为0,最大线程数为 Integer.MAX_VALUE,即线程数量可以无限制增加。当一个线程空闲时,它会尝试去执行队列中等待的任务。如果没有等待的任务,它会保持空闲状态等待新的任务加入。如果等待的任务数量超过了 SynchronousQueue 的容量,就会新建线程来处理任务。
ExecutorService executor = Executors.newFixedThreadPool(n); 需要注意的是,这些线程池实现返回的都是一个 ExecutorService 对象或其子类,需要使用 execute 方法提交任务并执行。例如:
executor.execute(new Runnable(){ @Override public void run() { // 执行具体的任务 } });
Java中创建线程池有以下几种方式:
ExecutorService executor = Executors.newFixedThreadPool(n);
ExecutorService executor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newCachedThreadPool();
ScheduledExecutorService executor = Executors.newScheduledThreadPool(corePoolSize);
以上都是通过工厂方法 Executors 创建的,也可以通过 ThreadPoolExecutor 类直接创建自定义的线程池。ThreadPoolExecutor 类的构造方法可以接受很多参数,包括线程池的核心线程数、最大线程数、任务队列、线程存活时间等等,具有更灵活的配置选项。
其中,corePoolSize 是指核心线程池大小,maximumPoolSize 是指线程池最大大小,keepAliveTime 是指线程空闲后的存活时间,unit 是指时间单位,workQueue 是指任务队列。任务队列可以选择使用 ArrayBlockingQueue、LinkedBlockingQueue 或 SynchronousQueue 等类型。
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
ForkJoinPool executor = new ForkJoinPool();
Executor executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
CachedThreadPoolExecutor:这是 ThreadPoolExecutor 的一种定制化实现,使用 SynchronousQueue 作为任务队列。线程池的核心线程数为0,最大线程数为 Integer.MAX_VALUE,即线程数量可以无限制增加。当一个线程空闲时,它会尝试去执行队列中等待的任务。如果没有等待的任务,它会保持空闲状态等待新的任务加入。如果等待的任务数量超过了 SynchronousQueue 的容量,就会新建线程来处理任务。
ExecutorService executor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newFixedThreadPool(n);
需要注意的是,这些线程池实现返回的都是一个 ExecutorService 对象或其子类,需要使用 execute 方法提交任务并执行。例如:
executor.execute(new Runnable(){
@Override
public void run() {
// 执行具体的任务
}
});