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

58同城合肥网站建设网站建设前端和后端的区别

58同城合肥网站建设,网站建设前端和后端的区别,黄岛做网站哪家好,腾讯cdn加速wordpress本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程#xff0c;每个线程内逻辑时#xff0c;判断BlockingDeque任务是否处理完#xff0c;处理完退出#xff0c;还有任务就BlockingDe…本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程每个线程内逻辑时判断BlockingDeque任务是否处理完处理完退出还有任务就BlockingDeque.take()取任务处理主线程join等待多线程处理完收尾处理完成任务。 最开始版本代码10个任务3个线程来处理 package org.example;import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque;public class Main3 {public static void main(String[] args){System.out.println(start);BlockingDequeInteger task new LinkedBlockingDeque();for (int i 0; i 10; i) {task.add(i);}ListThread workers new ArrayList();for (int i 0; i 3; i) {Thread worker new Thread(()-{while (true) {Integer data null;try {if (task.size()0) {System.out.println(Thread.currentThread().getName() quit);break;} // Thread.sleep(100); // 默认任务耗时data task.take();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName() do data);}});workers.add(worker);worker.start();}for (Thread worker: workers) {try {worker.join();} catch (InterruptedException e) {throw new RuntimeException(e);}}System.out.println(job done);} }运行之后感觉非常好完美实现逻辑 但是当把上面的任务数加到200线程数加到30上面线程sleep的注释打开再次运行就会发现主进程最后会被一直卡着不结束说明多线程没有正确判断任务结束线程不安全 上面的子线程内的size()等于0到下面的BlockingDeque.take()取任务这段之间的代码这段不是线程安全的 让线程正确判断任务结束而且要线程安全的三种方法推荐第二种兼顾效率和兼容正确性 判断任务结束这段代码加synchronized约束起来实现线程安全太慢给总任务task内加入和线程相同数量的停止标志marker使用BlockingDeque.poll(超时时间) 异常数据检查需要检查异常数据 使用synchronized约束 package org.example;import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque;public class Main {public static void main(String[] args) {System.out.println(start);BlockingDequeInteger task new LinkedBlockingDeque();for (int i 0; i 20; i) {task.add(i);}ListThread workers new ArrayList();for (int i 0; i 3; i) {Thread worker new Thread(()-{while (true) {Integer data null;synchronized (task) {if (task.size() 0) {System.out.println(Thread.currentThread().getName() quit);break;}try {data task.take();} catch (InterruptedException e) {throw new RuntimeException(e);}}try {Thread.sleep(300);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName() do data);}});workers.add(worker);worker.start();}for (Thread worker: workers) {try {worker.join();} catch (InterruptedException e) {throw new RuntimeException(e);}}System.out.println(job done);} }总任务添加stop marker停止标志 package org.example;import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque;public class Main2 {public static void main(String[] args){System.out.println(start);BlockingDequeInteger task new LinkedBlockingDeque();for (int i 0; i 20; i) {task.add(i);}ListThread workers new ArrayList();for (int i 0; i 3; i) task.add(99);for (int i 0; i 3; i) {Thread worker new Thread(()-{while (true) {Integer data null;try {data task.take();if (data 99) {System.out.println(Thread.currentThread().getName() quit);break;}} catch (InterruptedException e) {throw new RuntimeException(e);}try {Thread.sleep(300);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName() do data);}});workers.add(worker);worker.start();}for (Thread worker: workers) {try {worker.join();} catch (InterruptedException e) {throw new RuntimeException(e);}}System.out.println(job done);} }使用BlockingDeque.poll(超时时间)避免了take的永久性等待问题但是会取到null值要加判断处理 package org.example;import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit;public class Main4 {public static void main(String[] args){System.out.println(start);BlockingDequeInteger task new LinkedBlockingDeque();for (int i 0; i 200; i) {task.add(i);}ListThread workers new ArrayList();for (int i 0; i 30; i) {Thread worker new Thread(()-{while (true) {Integer data null;try {if (task.size()0) {System.out.println(Thread.currentThread().getName() quit);break;}Thread.sleep(100); // 默认任务耗时data task.poll(1000, TimeUnit.MILLISECONDS);if (data null) {System.out.println(Thread.currentThread().getName() get null);continue;}} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName() do data);}});workers.add(worker);worker.start();}for (Thread worker: workers) {try {worker.join();} catch (InterruptedException e) {throw new RuntimeException(e);}}System.out.println(job done);} }
http://www.w-s-a.com/news/138018/

相关文章:

  • 邯郸市城乡建设管理局网站vimwiki wordpress
  • 如何修改wordpress站名如何制作公司网站
  • 宁波网站建设与推广方案网站有了备案号之后能做什么
  • 汕头手机端建站模板pinterest app下载
  • 网站主机免费宁波网站建设优化诊断
  • 吧网站做软件的软件下载简单的ui界面制作
  • 陕西网站制作公司网页制作与设计代码
  • 做网站行情郑州微信网站开发
  • 河间网站建设制作null wordpress theme
  • h5网站制作网站开发网站建设文翻译工作
  • 网站建设 税种秦皇岛哪有网站优化公司
  • 专业开发网站设计找人做网页需要多少钱
  • 手机购物网站 建站网站建设网站制作网站设计
  • 基于iview的网站开发模板小程序制作需要什么语言
  • 精美网站设计保定建行网站首页登录
  • 网站建设常见问题做网站保存什么格式最好
  • 营销型网站建设与网页设计网站建设 amp 找VX cp5173
  • 新网站该如何做网站优化呢儿童手工
  • 湖北现代城市建设集团网站搜索引擎优化的作用
  • 上海做网站吧开一家软件开发公司需要什么
  • 阿里巴巴网站建设改图片建设厅官方网站河南
  • 邓砚谷电子商务网站建设镇江网
  • 网站空间支持什么程序工作服款式
  • 网站单页品牌网站建设 蝌蚪5小
  • 怎么做外贸网站需注意哪些做电脑系统的网站
  • 网站建设介绍推广用语河南网站优化外包服务
  • 课程网站模板贵州省城乡与建设厅网站
  • 网站模板及源码谁家网站用户体验做的好
  • 做网站的技术要求搜索栏在wordpress菜单上位置
  • 如何给网站弄ftpwordpress怎么添加关键词描述