一、概述
java.util.concurrent中有非常方便的线程池实现,提供的Executor框架包含用于管理实现Runnable任务,Executors类提供了许多不同类型的Executor实现的静态工厂方法。
二、实例
public class MyTask implements Runnable
{
public void run()
{
System.out.println(Thread.currentThread().getName() + "任务正在运行");
}
}
①固定大小线程池newFixedThreadPool
public class FixedThreadPoolTest
{
public static void main(String[] args)
{
// 创建固定大小为5的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(5);
// 模拟执行了20个任务,而线程池中只有5个线程
for (int i = 0; i < 20; i++)
{
try
{
// 一次执行五个任务,其余任务排队
Thread.sleep(20);
threadPool.execute(new MyTask());
}
catch (Exception e)
{
e.printStackTrace();
}
}
threadPool.shutdown();
}
}
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-5任务正在运行
②不限制大小的线程池newCachedThreadPool
public class CachedThreadPool
{
public static void main(String[] args)
{
// 不限制线程池的大小
// 当以前创建的线程可以使用时会重新使用
ExecutorService threadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 20; i++)
{
threadPool.execute(new MyTask());
}
threadPool.shutdown();
}
}
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-6任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-4任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-5任务正在运行
pool-1-thread-7任务正在运行
pool-1-thread-3任务正在运行
pool-1-thread-2任务正在运行
pool-1-thread-8任务正在运行
pool-1-thread-6任务正在运行
③单线程池newSingleThreadExecutor
public class SingleThreadPool
{
public static void main(String[] args)
{
// 单线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for (int i = 0; i < 20; i++)
{
threadPool.execute(new MyTask());
}
threadPool.shutdown();
}
}pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
pool-1-thread-1任务正在运行
④定时任务线程池newScheduledThreadPool
public class ScheduledPool
{
public static void main(String[] args)
{
// 定时任务线程池
ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);
// 三秒后运行任务
threadPool.schedule(new MyTask(), 3, TimeUnit.SECONDS);
// 五秒钟后运行,每隔两秒钟执行一次
threadPool.scheduleAtFixedRate(new MyTask(), 5, 2, TimeUnit.SECONDS);
}
}
相关文章
- 07-23(并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块
- 07-23线程池之ThreadPoolExecutor使用(2)
- 07-23线程池之实例2
- 07-23【resin】 resin3 线程池与IO模型(2)
- 07-23[Java] Java核心(2)深入理解线程池ThreadPool
- 07-23《java.util.concurrent 包源码阅读》11 线程池系列之ThreadPoolExecutor 第一部分
- 07-23python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用)
- 07-23java并发编程(2)线程池的使用
- 07-23Java.util.concurrent之 Executor框架与线程池
- 07-23霸气!这份清华学霸整理的Java线程池笔记,2小时从入门到入坟