-
线程池
实现了对线程的复用,统一管理和维护线程,减少没有必要的开销。
为什么要用线程池?
为了提高效率,需要将一些业务采用多线程的方式去执行。几乎所有需要异步或并发执行任务的程序都可以使用线程池。
线程池的概念和连接池是类似的。在Java集合中存储大量的线程对象,每次执行异步操作或者多线程操作时,直接从集合中拿到线程对象执行方法,不需要每次创建和销毁线程。 -
Jdk自带的线程池:
Jdk中基于Executors工具类提供了很多种线程池,一般不会用。
2.1 newFixedThreadPool
这个线程池的线程数的固定的,构建线程池的时候指定。线程是懒加载,当线程池创建好后,线程池中是没有线程的,是随着任务的提交将线程在线程池中创建出来。如果任务过来,没有空闲线程了,会把任务放在阻塞队列里(LinkedBlockingQueue无界队列)。直到有空闲线程,则从阻塞队列里获取一个任务进行处理。
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(() -> {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-thread1");
});
threadPool.submit(() -> {
System.out.println(Thread.currentThread().getName() + "-thread2");
});
}
2.2 newSigleThreadExecutor
标签:Java,Thread,记录,队列,threadPool,任务,线程 From: https://www.cnblogs.com/chengdanally/p/18436702