代码示例 以下是一个简单的示例,演示如何设置线程池的核心参数: importjava.util.concurrent.*;publicclassThreadPoolExample{publicstaticvoidmain(String[]args){intcorePoolSize=2;intmaxPoolSize=4;longkeepAliveTime=10;TimeUnitunit=TimeUnit.SECONDS;BlockingQueue<Runnable>workQueue=newArrayBlockingQueue<>(2);Th...
可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。它们的原理是遍历线程池中的工作线程,然后逐个调用线程的interrupt方法来中断线程,所以无法响应中断的任务可能永远无法终止。但是它们存在一定的区别,shutdownNow首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列...
在《Java并发编程实战》一书中,作者 Brian Goetz 等人指出,线程池的规模应该根据任务类型和计算密集度来确定,对于 CPU 密集型任务,应该将核心线程数设置为处理器核心数加 1 或者 2;对于 I/O 密集型任务,可以适当增加核心线程数以利用空闲的 CPU 时间。
java doc不提倡我们直接使用ThreadPoolExecutor,而是使用Executors类中提供的几个静态方法来创建线程池,例如:Executors.newCachedThreadPool(); Executors.newSingleThreadExecutor(); 等。 大公司的建议 很多大公司会明确要求使用创建ThreadPoolExecutor对象的方法来使用线程池,因为这样能使人明确各个参数的具体含义。Executors...