当前位置: 首页 > news >正文

网站设计开发的难点网站论坛模板下载

网站设计开发的难点,网站论坛模板下载,沈阳工程建设信息网站,长春网站设计外包在Java中#xff0c;线程池是一种重要的多线程处理方式#xff0c;通过管理和复用线程#xff0c;提高应用程序的性能和响应速度#xff0c;减少线程创建和销毁的开销#xff0c;避免线程数量过多导致系统负载过高的问题。本文将详细介绍Java线程池的概念、核心参数、工作…在Java中线程池是一种重要的多线程处理方式通过管理和复用线程提高应用程序的性能和响应速度减少线程创建和销毁的开销避免线程数量过多导致系统负载过高的问题。本文将详细介绍Java线程池的概念、核心参数、工作流程、常见类型、拒绝策略以及使用方法和优化建议。 一、线程池的概念 线程池就是线程的池子用来管理和复用线程。它可以在应用程序中有效地管理线程的生命周期、调度和执行。线程池包含一组预先创建的线程这些线程可以被动态分配给执行任务从而避免了不断创建和销毁线程的开销。线程池通常用于执行大量的异步任务提高多线程程序的性能和稳定性。 二、线程池的核心参数 线程池的核心参数包括 corePoolSize核心线程数线程池中保持的最小线程数即使线程是空闲的。这些线程在处理任务时不会被回收除非设置了allowCoreThreadTimeOut(true)来允许核心线程在空闲时被回收。maximumPoolSize最大线程数线程池允许的最大线程数包括核心线程和非核心线程。当任务队列已满且活动线程数小于最大线程数时会创建新的线程。keepAliveTime线程空闲时间非核心线程的空闲时间超过这个值就会被回收。指定非核心线程空闲线程的最长存活时间。unit时间单位用于指定keepAliveTime的时间单位可以是TimeUnit.MILLISECONDS等。workQueue任务队列用于保存等待执行的任务。选择合适的任务队列例如LinkedBlockingQueue、ArrayBlockingQueue等以满足需求。threadFactory线程工厂用于创建新线程。通过线程工厂可以给每个创建出来的线程设置更有意义的名字。handler拒绝策略当队列和线程池都满了说明线程池处于饱和状态必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy表示无法处理新任务时抛出异常。还可以选择CallerRunsPolicy用调用者所在线程来运行任务、DiscardPolicy丢弃队列里最近的一个任务并执行当前任务、DiscardOldestPolicy丢弃最老的任务尝试重新提交新的任务等策略或者根据应用场景实现RejectedExecutionHandler接口自定义策略。 三、线程池的工作流程 线程池的工作流程如下 当有新任务来时将先使用核心线程执行。当任务数达到核心线程数时后续的任务会被放入任务队列中等待执行。如果任务队列已满且活动线程数小于最大线程数会创建新的非核心线程来执行任务。当任务数达到最大线程数时线程池满了如果有新的任务将执行拒绝策略。 四、常见线程池类型 Java中常见的线程池类型包括 FixedThreadPool固定大小线程池包含固定数量的线程适用于需要限制并发线程数量的场景。CachedThreadPool缓存线程池不固定线程数量可以根据需要自动创建新线程适用于短期异步任务。SingleThreadPool单线程池只包含一个工作线程保证所有任务按顺序执行适用于需要保持任务顺序执行的场景。ScheduledThreadPool定时线程池可以执行定时任务和周期性任务。WorkStealingPool工作窃取线程池Java 8中引入的一种新类型的线程池主要用于处理耗时任务适用于需要大量并行任务、任务之间没有依赖关系的情况。 五、线程池的使用 Java提供了ThreadPoolExecutor类来实现线程池的管理。以下是使用ThreadPoolExecutor创建线程池并提交任务的示例代码 import java.util.concurrent.*; public class ThreadPoolExample { public static void main(String[] args) { // 创建线程池 ThreadPoolExecutor executor new ThreadPoolExecutor( 2, // 核心线程数 4, // 最大线程数 60, // 线程空闲时间 TimeUnit.SECONDS, new LinkedBlockingQueueRunnable() ); // 向线程池提交任务 for (int i 0; i 10; i) { final int task i; executor.execute(new Runnable() { Override public void run() { System.out.println(Thread.currentThread().getName() 正在执行第 (task 1) 个任务); } }); } // 关闭线程池 executor.shutdown(); } } 此外Java还提供了Executors工厂类来方便地创建常见的线程池类型。以下是使用Executors创建固定大小线程池、缓存线程池、单线程池和定时线程池的示例代码 import java.util.concurrent.*; public class ExecutorsExample { public static void main(String[] args) { // 创建固定大小线程池 ExecutorService fixedThreadPool Executors.newFixedThreadPool(3); // 创建缓存线程池 ExecutorService cachedThreadPool Executors.newCachedThreadPool(); // 创建单线程池 ExecutorService singleThreadPool Executors.newSingleThreadExecutor(); // 创建定时线程池 ScheduledExecutorService scheduledThreadPool Executors.newScheduledThreadPool(3); // 向线程池提交任务示例 for (int i 0; i 3; i) { final int task i; fixedThreadPool.execute(new Runnable() { Override public void run() { System.out.println(Thread.currentThread().getName() 正在执行固定大小线程池中的第 (task 1) 个任务); } }); cachedThreadPool.execute(new Runnable() { Override public void run() { System.out.println(Thread.currentThread().getName() 正在执行缓存线程池中的第 (task 1) 个任务); } }); singleThreadPool.execute(new Runnable() { Override public void run() { System.out.println(Thread.currentThread().getName() 正在执行单线程池中的第 (task 1) 个任务); } }); } // 定时任务示例 scheduledThreadPool.schedule(new Runnable() { Override public void run() { System.out.println(定时任务执行); } }, 2, TimeUnit.SECONDS); // 关闭线程池示例 fixedThreadPool.shutdown(); cachedThreadPool.shutdown(); singleThreadPool.shutdown(); scheduledThreadPool.shutdown(); } } 六、线程池的拒绝策略 当线程池和队列都满了时需要采取拒绝策略来处理新的任务。Java线程池支持多种拒绝策略包括 AbortPolicy直接抛出异常防止系统崩溃。CallerRunsPolicy在提交者线程中执行任务。DiscardPolicy直接丢弃新任务。DiscardOldestPolicy丢弃最老的任务尝试重新提交新的任务。 选择合适的拒绝策略可以避免任务丢失或者对系统造成过度负荷的影响。 七、线程池的优化建议 合理设置线程池大小根据任务类型、执行时间和系统负载等因素来确定线程池大小。如果任务是I/O密集型可以适当增加线程池大小如果任务是计算密集型可以适当减少线程池大小。使用有界队列无界队列可能会导致内存溢出因此建议使用有界队列并根据实际情况选择合适的拒绝策略。动态调整线程池大小通过调整keepAliveTime的值来动态调整线程池大小。例如当任务量较少时可以把keepAliveTime设置较长让多余的线程等待更长时间以便对突发任务做出快速响应。及时移除空闲线程保持线程池中的空闲线程数量最小可以减少系统资源开销。避免线程池饥饿线程池饥饿会导致任务一直处于排队状态无法得到处理。可通过调整线程池大小、队列类型和拒绝策略等来避免线程池饥饿。
http://www.sczhlp.com/news/170642/

相关文章:

  • 襄阳php网站开发php程序员网站开发招聘
  • 如何做网站跳转登入wordpress新数据库
  • 国外域名抢注网站阜阳做网站多少钱
  • 咸宁市网站建设电影网站建设多少钱
  • 手机wap版网站制作做软件的叫什么职业
  • 后盾网原创实战网站建设教程怎么能自己做网站
  • 需求网站网络推广如何做
  • 深圳集团网站建设案例企业解决方案 msdn技术资源库
  • 做侵权网站用哪里的服务器稳企业所得税费用计算公式
  • 吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(二)
  • 08. 自定义组件
  • WannaCry勒索病毒数字取证与安全监控实战指南
  • 成都网站服务网页模板网站有那些
  • 北京市企业网站建设青岛网站建设网址
  • wordpress4.7.1漏洞wordpress固定连接优化
  • 什么类型的公司需要做建设网站的网站建设衤金手指花总
  • 网站留言板功能宝塔一键部署wordpress
  • 微信网站如何做有什么平台可以发广告
  • 一般门户网站北京seo网站结构优化
  • 黑色炫酷的监控网站html西安高科鱼化建设有限公司网站
  • 一个虚拟主机怎么做多个网站赣州网上中介服务超市
  • 昆明房产网站建设电子商务名词解释
  • 巩义网站公司网站建设制作fash
  • 襄阳市建设工程造价管理站网站江西省住房建设部官方网站
  • 建设网站企业哪家好汽车创意logo设计
  • 东莞浩智网站建设哪家好wordpress 微博客
  • 临沂市兰山区建设局网站常州seo技术
  • 建站用什么工具陕西省住房建设厅官网
  • 厦门市建设工程质量安全协会网站天津工程建设招标网站
  • 好看的响应式网站wordpress 國内加速