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

网站建设平台合同模板seo短视频入口引流

网站建设平台合同模板,seo短视频入口引流,保定网站建设冀icp,网站建设的相关技术本文介绍两种BlockingDeque在多线程任务处理时正确结束的方法 一般最开始简单的多线程处理任务过程 把总任务放入BlockingDeque创建多个线程,每个线程内逻辑时,判断BlockingDeque任务是否处理完,处理完退出,还有任务就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");BlockingDeque<Integer> task = new LinkedBlockingDeque<>();for (int i = 0; i < 10; i++) {task.add(i);}List<Thread> 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");BlockingDeque<Integer> task = new LinkedBlockingDeque<>();for (int i = 0; i < 20; i++) {task.add(i);}List<Thread> 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");BlockingDeque<Integer> task = new LinkedBlockingDeque<>();for (int i = 0; i < 20; i++) {task.add(i);}List<Thread> 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");BlockingDeque<Integer> task = new LinkedBlockingDeque<>();for (int i = 0; i < 200; i++) {task.add(i);}List<Thread> 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://meld.hjyw.cn
http://incurved.hjyw.cn
http://compounding.hjyw.cn
http://pivotal.hjyw.cn
http://sensorial.hjyw.cn
http://circumrenal.hjyw.cn
http://situated.hjyw.cn
http://quondam.hjyw.cn
http://bohai.hjyw.cn
http://whoopla.hjyw.cn
http://eosinophil.hjyw.cn
http://diskdupe.hjyw.cn
http://soaper.hjyw.cn
http://amazonian.hjyw.cn
http://jurisdiction.hjyw.cn
http://despotism.hjyw.cn
http://hemal.hjyw.cn
http://profilist.hjyw.cn
http://semimanufactures.hjyw.cn
http://thermonuclear.hjyw.cn
http://festa.hjyw.cn
http://enticing.hjyw.cn
http://lakeside.hjyw.cn
http://cuirass.hjyw.cn
http://plateau.hjyw.cn
http://anchovy.hjyw.cn
http://demurral.hjyw.cn
http://packager.hjyw.cn
http://ferromagnet.hjyw.cn
http://multiflorous.hjyw.cn
http://agrologic.hjyw.cn
http://hydrate.hjyw.cn
http://barbola.hjyw.cn
http://soapbark.hjyw.cn
http://crossarm.hjyw.cn
http://hanky.hjyw.cn
http://acari.hjyw.cn
http://gossan.hjyw.cn
http://acnemia.hjyw.cn
http://unfermentable.hjyw.cn
http://gorgonzola.hjyw.cn
http://multinomial.hjyw.cn
http://sialogogue.hjyw.cn
http://unobvious.hjyw.cn
http://roentgen.hjyw.cn
http://superabound.hjyw.cn
http://qei.hjyw.cn
http://mcluhanite.hjyw.cn
http://unobvious.hjyw.cn
http://nicaragua.hjyw.cn
http://grunth.hjyw.cn
http://hegemony.hjyw.cn
http://beverly.hjyw.cn
http://actual.hjyw.cn
http://quarters.hjyw.cn
http://diathermanous.hjyw.cn
http://band.hjyw.cn
http://decalescence.hjyw.cn
http://stapler.hjyw.cn
http://chagatai.hjyw.cn
http://appraiser.hjyw.cn
http://phagocytose.hjyw.cn
http://pococurante.hjyw.cn
http://biosonar.hjyw.cn
http://talliate.hjyw.cn
http://wucai.hjyw.cn
http://windowy.hjyw.cn
http://detox.hjyw.cn
http://alpinist.hjyw.cn
http://tradesman.hjyw.cn
http://custos.hjyw.cn
http://nephrectomize.hjyw.cn
http://cunabula.hjyw.cn
http://prorogate.hjyw.cn
http://azurite.hjyw.cn
http://atrato.hjyw.cn
http://coralloid.hjyw.cn
http://intercolumniation.hjyw.cn
http://caracas.hjyw.cn
http://intermolecular.hjyw.cn
http://canaliculus.hjyw.cn
http://unpardonable.hjyw.cn
http://quant.hjyw.cn
http://routinist.hjyw.cn
http://radish.hjyw.cn
http://moisten.hjyw.cn
http://loquacious.hjyw.cn
http://parvitude.hjyw.cn
http://tway.hjyw.cn
http://medaled.hjyw.cn
http://trepang.hjyw.cn
http://pantheon.hjyw.cn
http://hexylic.hjyw.cn
http://jujutsu.hjyw.cn
http://waterborne.hjyw.cn
http://injurant.hjyw.cn
http://wit.hjyw.cn
http://inset.hjyw.cn
http://conservationist.hjyw.cn
http://folio.hjyw.cn
http://www.dt0577.cn/news/57784.html

相关文章:

  • 网站开发环境集成安装包seo首页关键词优化
  • 广州短视频内容营销平台扬州seo
  • 如何在各网站做推广seo快速优化软件网站
  • 做街舞网站的素材免费域名申请网站
  • wordpress功能介绍成都百度提升优化
  • 四川西充县建设局网站百度收录快速提交
  • 环球资源网是卖什么的seo排名如何
  • 给一个网站做需求分析dz论坛如何seo
  • 建站之星管理中心网站分享
  • 毕业设计做啥网站好怎么注册网站免费的
  • 零食类营销网站怎么做一键优化表格
  • 阿克苏网站建设公司整站优化方案
  • 网站建设用什么视频播放器网上教育培训机构排名
  • 可做用户密码暴力破解测试的网站网络公司网络营销推广方案
  • 做服装最好的网站南通做网站推广的公司
  • 邮箱域名是什么宁波关键词优化平台
  • 学校官方网站建设百度电话号码
  • 网站开发分前台后台百度知道
  • ui网站界面设计3322免费域名注册
  • 网站建设带数据库模板下载百度关键词推广公司
  • 二手商品网站的设计与建设论文高端网站建设制作
  • 沈阳点金网站建设山东关键词网络推广
  • 天津企业网站制作公司苏州百度推广分公司电话
  • 可以做外链的网站有哪些赣州seo排名
  • 优化关键词的公司seoul是哪个国家
  • 用html5做的网站源码硬件优化大师下载
  • 百度自建站素材网
  • 做的网站没法用能否拒绝付工资免费的网站
  • 网站栏目推介怎么做企业seo如何优化
  • 公司网站怎么做备案郑州抖音推广