java 核心编程——线程之线程池(ExecutorService)
Posted 柳暗花明睡一觉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 核心编程——线程之线程池(ExecutorService)相关的知识,希望对你有一定的参考价值。
1.线程池产生的背景
web服务,数据库访问等都需要处理大量的请求线程,如果每次都为每个请求创建新的线程,任务完成销毁线程,对于服务器来说,创建和销毁线程对资源的消耗都是比较大的。所以为了防止资源浪费,必须得对线程进行管理。线程池就是管理线程的高级技术。
2.线程池的功能
2.1通过对线程的管理,更合理高效的使用资源。
2.2通过对线程池的维护,可以节省创建线程的开销。
3.线程池的使用
package se.thread; import java.util.Random; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TreadPoolTest extends Thread { public static void main(String[] args) { TreadPoolTest treadPoolTest = new TreadPoolTest(); treadPoolTest.start(); } @Override public void run() { ExecutorService executorService = Executors.newFixedThreadPool(2); for (int i = 0; i < 100; i++) { Runnable runnable = new Runnable() { @Override public void run() { long time = (long)(Math.random()*1000); System.out.println("休息时间:"+time+" ms"); try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } }; executorService.execute(runnable); } executorService.shutdown(); } }
注意:1.线程池必须使用shutdown显示关闭。
2.在for循环中一般会等待线程池空闲线程,会导致主线程阻塞,所以一般都将for循环放入线程中让其运行。
以上是关于java 核心编程——线程之线程池(ExecutorService)的主要内容,如果未能解决你的问题,请参考以下文章
Java 并发编程线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )
Java 并发编程线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )