08 线程池
Posted alichengxuyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了08 线程池相关的知识,希望对你有一定的参考价值。
问题
线程池的作用是什么
答案
如果没有线程池,用户的每一个请求都会经历申请资源创建线程,执行线程,释放资源销毁线程这个过程,很多时间浪费在创建和销毁这两件事情上。如果用户请求时线程已经存在,用户使用线程结束也不用去考虑如何销毁,由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源的方法。线程池中的线程可以多次重用,这与数据库连接池是相同的逻辑。常见的线程池有:
- 固定大小线程池,线程个数是固定的
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println("newFixedThreadPool");
}
});
executorService.shutdown();
- 缓冲线程池,线程个数不固定,随着用户请求可以扩展线程个数
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println("newFixedThreadPool");
}
});
executorService.shutdown();
- 单个线程池,线程个数固定为1
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println("newFixedThreadPool");
}
});
executorService.shutdown();
- 周期线程池,可以周期性运行
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("newScheduledThreadPool");
}
},5,2,TimeUnit.SECONDS);
以上是关于08 线程池的主要内容,如果未能解决你的问题,请参考以下文章