网站建设几个要素,上海企业网络营销推广服务,潍坊知名网站建设哪家好,wordpress 10万并发#x1f308;键盘敲烂#xff0c;年薪30万#x1f308; 目录
一、线程池的存在意义 二、线程池的使用
2.1线程池的核心原理
2.2线程池的代码实现
三、自定义线程池
3.1线程池的参数详解
3.2线程池的执行原理
3.3灵魂两问
3.4线程池多大合适
3.5拒绝策略 一、线程池… 键盘敲烂年薪30万 目录
一、线程池的存在意义 二、线程池的使用
2.1线程池的核心原理
2.2线程池的代码实现
三、自定义线程池
3.1线程池的参数详解
3.2线程池的执行原理
3.3灵魂两问
3.4线程池多大合适
3.5拒绝策略 一、线程池的存在意义 系统创建一个线程的成本是比较高的因为它涉及到与操作系统交互当程序中需要创建大量生存期很短暂的线程时频繁的创建和销毁线程对系统的资源消耗有可能大于业务处理是对系统资源的消耗 二、线程池的使用
2.1线程池的核心原理 创建一个池子池子是空的 提交任务时池子会创建线程对象任务执行完毕将线程归还给池子待下一个线程使用 提交任务时池子中没有空闲线程也无法创建新的线程该任务就会排队等待 2.2线程池的代码实现 1.创建线程池 2.提交任务 3.所有任务执行完毕关闭线程 public class Test1 {public static void main(String[] args) throws InterruptedException {//创建线程池ExecutorService pool1 Executors.newCachedThreadPool();//创建指定数量的线程池ExecutorService pool2 Executors.newFixedThreadPool(3);//提交任务pool2.submit(new Myrunable());pool2.submit(new Myrunable());pool2.submit(new Myrunable());pool2.submit(new Myrunable());pool2.submit(new Myrunable());//销毁线程池pool2.shutdown();//提交任务pool1.submit(new Myrunable());Thread.sleep(1000);pool1.submit(new Myrunable());Thread.sleep(1000);pool1.submit(new Myrunable());Thread.sleep(1000);//销毁线程池pool1.shutdown();} 三、自定义线程池
java把线程池封装为ThreadPoolExecutor类利用构造方法创建线程池对象 3.1线程池的参数详解 3.2线程池的执行原理 3.3灵魂两问 一问先提交的任务一定先被执行吗 二问临时线程何时创建 答 先提交任务不一定先执行因为先提交的任务可能在等待队列中等待而后提交的任务交给临时线程处理 当等待队列已满创建临时线程 3.4线程池多大合适
CPU密集型的最大并行数1
I/O密集型的最大并行数*cpu期望利用率*总时间/CPU计算时间 //获取虚拟机可获得的线程数 //我的电脑就是4核4线的 int count Runtime.getRuntime().availableProcessors(); System.out.println(count); 3.5拒绝策略
当线程池中总线程数都在使用且等候队列也已满触发拒绝策略 总结
以上就是学习线程池的相关内容欢迎批评指正