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

中国建设银行手机银行家网站免费淘宝关键词工具

中国建设银行手机银行家网站,免费淘宝关键词工具,设计师培训多少钱,佛山做网站制作公司第1步:自定义线程实现类 Java中多线程编码时,定义线程类有两种方式: 继承Thread类实现Runnable接口(由于Java的单继承特性,一般推荐使用此方式) public class BizThread implements Runnable {private int …

第1步:自定义线程实现类

Java中多线程编码时,定义线程类有两种方式:

  • 继承Thread类
  • 实现Runnable接口(由于Java的单继承特性,一般推荐使用此方式)
public class BizThread implements Runnable {private int idx;public BizThread(int idx) {this.idx = idx;}@Overridepublic void run() {long threadId = Thread.currentThread().getId();System.out.println("这是第" + idx + "个线程>>>>>>>>>【线程ID-" + threadId + "】业务逻辑begin");// region 模拟业务逻辑处理过程try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}// endregionSystem.out.println("这是第" + idx + "个线程<<<<<<<<<【线程ID-" + threadId + "】业务逻辑end");}
}

第2步:使用ThreadPoolExecutor线程池启动线程

当调用线程池execute()方法添加一个任务时,线程池会做如下判断: ·

  • 如果有空闲线程,则直接执行该任务; ·
  • 如果没有空闲线程,且当前运行的线程数少于corePoolSize,则创建新的线程执行该任务; ·
  • 如果没有空闲线程,且当前的线程数等于corePoolSize,同时阻塞队列未满,则将任务入队列,而不添加新的线程; ·
  • 如果没有空闲线程,且阻塞队列已满,同时池中的线程数小于maximumPoolSize ,则创建新的线程执行任务; ·
  • 如果没有空闲线程,且阻塞队列已满,同时池中的线程数等于maximumPoolSize,则根据构造函数中的handler指定的策略来拒绝新的任务。
public class MultiThreadTest {public static void main(String[] args) {// 定义线程池ExecutorService pool = new ThreadPoolExecutor(2,9,60,TimeUnit.SECONDS,new SynchronousQueue<>(),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());// 模拟10个线程并发for (int i=1; i<=10; i++) {pool.execute(new BizThread(i));}}
}

运行结果:

这是第1个线程>>>>>>>>>【线程ID-12】业务逻辑begin
这是第5个线程>>>>>>>>>【线程ID-16】业务逻辑begin
这是第3个线程>>>>>>>>>【线程ID-14】业务逻辑begin
这是第8个线程>>>>>>>>>【线程ID-19】业务逻辑begin
这是第4个线程>>>>>>>>>【线程ID-15】业务逻辑begin
这是第2个线程>>>>>>>>>【线程ID-13】业务逻辑begin
这是第7个线程>>>>>>>>>【线程ID-18】业务逻辑begin
这是第9个线程>>>>>>>>>【线程ID-20】业务逻辑begin
这是第6个线程>>>>>>>>>【线程ID-17】业务逻辑begin
Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task com.etoak.BizThread@14ae5a5 rejected from java.util.concurrent.ThreadPoolExecutor@7f31245a[Running, pool size = 9, active threads = 9, queued tasks = 0, completed tasks = 0]at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)at com.etoak.MultiThreadTest.main(MultiThreadTest.java:50)
这是第8个线程<<<<<<<<<【线程ID-19】业务逻辑end
这是第6个线程<<<<<<<<<【线程ID-17】业务逻辑end
这是第5个线程<<<<<<<<<【线程ID-16】业务逻辑end
这是第1个线程<<<<<<<<<【线程ID-12】业务逻辑end
这是第2个线程<<<<<<<<<【线程ID-13】业务逻辑end
这是第7个线程<<<<<<<<<【线程ID-18】业务逻辑end
这是第3个线程<<<<<<<<<【线程ID-14】业务逻辑end
这是第9个线程<<<<<<<<<【线程ID-20】业务逻辑end
这是第4个线程<<<<<<<<<【线程ID-15】业务逻辑end

ThreadPoolExecutor构造方法参数说明:

  1. corePoolSize(核心线程数量):核心线程默认会一直存活,即使没有任务需要执行
  2. maximumPoolSize(线程池最大线程数量):线程池中能拥有最大线程数
  3. keepAliveTime(空闲线程的存活时间):当线程空闲时间达到keepAliveTime时,线程会销毁,线程数量默认会收缩至corePoolSize的大小
  4. unit(时间单位):指定keepAliveTime的单位
  5. workQueue(任务队列):缓存任务的排队策略(SynchronousQueue队列,一个不缓存任务的阻塞队列,本身没有容量大小;每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态)
  6. threadFactory(创建线程工厂):默认会使用ThreadPoolExecutor.defaultThreadFactory()创建线程
  7. handler(任务拒绝策略):当workQueue已满,且线程池中的线程数达到maximumPoolSize时,线程池拒绝添加新任务时采取的策略(AbortPolicy策略:丢弃新任务,并抛出运行时异常由开发人员进行处理)
http://www.hengruixuexiao.com/news/45122.html

相关文章:

  • 网站开发模块学些什么软件网站建设运营
  • 中山专业门户网站制作咨询百度推广怎么优化排名
  • 吉林省建设厅网站杨学武南通网站快速收录
  • 公司网站制作仿站免费自己制作网站
  • 邢台网站建设公司排名怎样让自己的网站排名靠前
  • 什么公司做网站会提供源代码韶关今日头条新闻
  • 怎样做自己网站robots月饼营销软文
  • 日照网络营销北京网站seo招聘
  • 帮别人做违法网站会怎么样社群营销的具体方法
  • 怎样在文章后做网站链接网站维护费一年多少钱
  • 苏州网页设计电话快速排名生客seo
  • 苏州交友网站建设今天刚刚发生的新闻事故
  • 南通网站建设排名google推广方式和手段有哪些
  • 百度售后服务电话人工百度seo优化分析
  • 一台服务器做两个网站seo网站优化流程
  • 长沙公司网站制作建网站一般多少钱
  • 合肥比较好的网站建设公司广西网站建设
  • 苏州高端网站建设设计公司哪家好营销培训
  • 魔兽做宏网站百度首页广告多少钱
  • 南昌做网站seo北京本地网络推广平台
  • 没有网站可以做app吗广州线上教学
  • 用wordpress开发网站模板关键词完整版免费听
  • 贺州网站建设上海广告公司
  • 招商门户网站建设方案seo百度点击软件
  • 夏津网站建设电话公众号推广一个6元
  • 黄南网站建设网站建设合同
  • 二级菜单网站如何做伪静态百度的代理商有哪些
  • wordpress插件补丁天津seo数据监控
  • WordPress导航菜单不显示成都百度推广和seo优化
  • 泰安市住房与城乡建设局网站网络推广营销