Java通过Executors提供四种线程池,各自为:
newCachedThreadPool建立1个可缓存线程池,假如线程池总长度超出解决需要,可灵巧回收空余线程,若没法回收,则新创建线程。
newFixedThreadPool 建立1个定长线程池,可控制线程最多并发数,超过的线程会在列队中等候。
newScheduledThreadPool 建立1个定长线程池,支持自动及周期性任务实行。
newSingleThreadExecutor 建立1个单线程化的线程池,它总是用唯一的工作线程来执行任务,确保全部任务依照指定顺序(FIFO, LIFO, 优先级)执行。
小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料!
(1) newCachedThreadPool
建立1个可缓存线程池,假如线程池总长度超出解决需要,可灵巧回收空余线程,若没法回收,则新创建线程。示例代码如下:
线程池为无穷大,当实行下一个任务时第一位任务已经成功,会复用实行第一个任务的线程,而无需每一次新创建线程。
(2) newFixedThreadPool
建立1个定长线程池,可控制线程最多并发数,超过的线程会在列队中等候。示例代码如下:
由于线程池大小为3,每一任务输出index后sleep 2秒,因此每两秒打印三个数字。
定长线程池的大小最好是按照系统资源进行设定。如Runtime.getRuntime().availableProcessors()
(3) newScheduledThreadPool
建立1个定长线程池,支持定时及周期性任务执行。延迟执行示例代码如下图所示:
表示延迟3秒执行。
定期实行示例代码如下:
表示延迟一秒后每三秒实行一次。
(4) newSingleThreadExecutor
建立1个单线程化的线程池,它只会用唯一的工作线程来实行任务,确保全部任务依照特定先后顺序(FIFO, LIFO, 优先级)执行。示例代码如下:
结果依次输出,等于顺序执行每个任务。
你能使用JDK内置的监控专用工具来监控我们建立的线程总数,运作1个不停止的线程,建立特定量的线程,来观测:
工具目录:C:\Program Files\Java\jdk1.6.0_06\bin\jconsole.exe
运作程序做稍稍改动:
效果如下:
选择我们运行的程序:
监控运行状态
小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料!