范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

java三个线程顺序执行,你来说说有几种实现方式?

  能想起来几种呢?
  先说下要求,就是三个线程,假设是线程 1,2,3, 现在的要求是:必须是线程 1 先执行,然后线程 2 再执行,最后是线程 3 执行
  然后有几种实现方法呢?
  其实它的本质就是实现,让线程 2,3 等待线程 1 执行完毕,所以重点就是有哪些方法可以让线程 2,3 等待  join
  第一反应应该就是使用 join 方法,因为 join 本来就是支持这种机制的
  比如,我在线程 B 中调用了线程 A 的 join 方法,那么线程 B 就会等线程 A 执行结束之后再执行
  那么具体应该怎么使用嘞?
  别慌嘛,我这里有例子,你瞅瞅:  public class ThreadLoopOne {     public static void main(String[] args) {         Thread t1 = new Thread(new Work(null));         Thread t2 = new Thread(new Work(t1));         Thread t3 = new Thread(new Work(t2));          t1.start();         t2.start();         t3.start();     }      static class Work implements Runnable {         private Thread beforeThread;         public Work(Thread beforeThread){             this.beforeThread = beforeThread;         }          @Override         public void run() {             // 如果有线程,就 join 进来,没有的话就直接输出             if (beforeThread != null ){                 try {                     beforeThread.join();                     System.out.println("thread start : " + Thread.currentThread().getName());                 } catch (InterruptedException e) {                     e.printStackTrace();                 }             }else{                 System.out.println("thread start : " + Thread.currentThread().getName());             }         }     } } CountDownLatch
  刚才说了,本质就是让线程 B,C 等待线程 A 执行完毕
  那么信号量就是一个不错的选择
  如果想要实现的话,那大概就是下面这样:  public class ThreadLoopTwo {     public static void main(String[] args) {         // 设置线程 1 的信号量为 0         CountDownLatch cOne = new CountDownLatch(0);         // 设置线程 2 的信号量为 1         CountDownLatch cTwo = new CountDownLatch(1);         // 设置线程 3 的信号量为 1         CountDownLatch cThree = new CountDownLatch(1);          // 因为 cOne 为 0 ,故 t1 可以直接执行         Thread t1 = new Thread(new Work(cOne,cTwo));         // 线程 t1 执行完毕之后,此时的 cTwo 为 0 , t2 开始执行         Thread t2 = new Thread(new Work(cTwo,cThree));         // 线程 t2 执行完毕,此时 cThree 为 0 , t3 开始执行         Thread t3 = new Thread(new Work(cThree,cThree));          t1.start();         t2.start();         t3.start();     }      static class Work implements Runnable{         CountDownLatch cOne;         CountDownLatch cTwo;          public Work(CountDownLatch cOne, CountDownLatch cTwo){             super();             this.cOne = cOne;             this.cTwo = cTwo;         }         @Override         public void run() {             try {                 // 当前一个线程信号量为 0 时,才执行                 cOne.await();                 System.out.println("thread start : " + Thread.currentThread().getName());                 // 后一个线程信号量减 1                 cTwo.countDown();             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } } 使用单个线程池
  之所以线程 1,2,3 的执行顺序无法保证,是因为在编译器可能会去做一些优化,导致没有办法按照顺序执行
  如果我们使用单个线程池去执行的话,那就没有这样的问题了
  具体实现:  public class ThreadLoopThree {     public static void main(String[] args) {         Thread t1 = new Thread(new Runnable() {             @Override             public void run() {                 System.out.println("thread start : " + Thread.currentThread().getName() + " run one");             }         });          Thread t2 = new Thread(new Runnable() {             @Override             public void run() {                 System.out.println("thread start : " + Thread.currentThread().getName() + " run two");             }         });          Thread t3 = new Thread(new Runnable() {             @Override             public void run() {                 System.out.println("thread start : " + Thread.currentThread().getName() + " run three");             }         });          ExecutorService executor = Executors.newSingleThreadExecutor();         // 将线程依次加入到线程池中         executor.submit(t1);         executor.submit(t2);         executor.submit(t3);         // 及时将线程池关闭         executor.shutdown();     } } CompletableFuture
  如果使用 CompletableFuture 来实现的话,代码就非常简洁了  public class ThreadLoopFour {     public static void main(String[] args)  {         Thread t1 = new Thread(new Work());         Thread t2 = new Thread(new Work());         Thread t3 = new Thread(new Work());          CompletableFuture.runAsync(()-> t1.start())                 .thenRun(()->t2.start())                 .thenRun(()->t3.start());     }      static class Work implements Runnable{         @Override         public void run() {             System.out.println("thread start : " + Thread.currentThread().getName());         }     } }
  最后感谢各位的阅读,才疏学浅,难免存在纰漏,如果你发现错误的地方,由于本号没有留言功能,还请你在后台留言指出,我对其加以修改。

苹果七宗罪!砍拆卸电池砍SD卡砍耳机孔网友支持华为小米IPhone被乔布斯发布以来,苹果一直是智能手机界的标杆,一直是世界手机厂商模仿和追赶的对象。然而在用封闭的生态捆住消费者后,苹果也走上了阻碍创新的道路,利用垄断地位收取铸币税。昔米泊MUFA三脚架,角度随心所欲,摄影摄像皆可前两年,我结合自己的需求选择了一款承重大高度要达1。5m以上中轴倒置的三脚架。使用后发现一些不太满意的地方,拍片时调节角度太麻烦!因为平时使用三脚架不多,也就没有折腾更换。最近看到推荐雷神也出键盘了!RGB无线机械键盘大电池,双接收器数码值自主轴,无线连接,3000毫安大电池,双接收器。KL30使用雷神定制TR机械轴,双注塑工艺PBT材质键帽,配备滚轮式多媒体键,及5个独立宏按键。支持有线2。4G无线双模连接,汉再获智能电动汽车权威机构高度认可,总分85。4分迄今位居第一最近看到CCRT发布的最新测评结果。汉拿下了总分85。4分的高得分。其中智能化电动化健康环保三个板块都拿到了各自板块的第一。大家可能对85。4分没什么具体的概念,刚刚好够到优秀线吗主流手机DC调光方案的优缺点及红米K20Pro硬件DC调光方案讲解编者注红米K20Pro发布时提到了硬件DC调光,我和很多网友一样,只知道此方案很好。可为什么好呢?相较于普通的DC调光,有什么不同?黑鲨2加入独立的图像处理器不是硬件调光?看到小米小米至暗时刻的指引神明雷军(上)编辑纣王今年,是小米手机的十周年。所以在雷军2021年度演讲暨小米秋季新品发布会上,除了带来小米MIX4小米平板5系列等重磅新作外,雷军还立下了一个目标三年时间内超越三星,晋升为全山寨机复活史曾被13亿人唾骂,今在快手拼多多1天卖4000万文海燕前段时间,快手主播二驴夫妇卖朵唯山寨机,许多顾客买了后,发现手机四个摄像头只有一个能用,说好256G结果只有54G能用。接着官方罚主播假一赔九,被坑了899的用户,回过头来又三摄版的魅族16S只要1698元,你心动吗?魅族16Xs在发布前争议很大,最主要的原因是搭载的是骁龙675处理器。虽然在CPU性能上比上代采用的骁龙710略好,但综合表现不如骁龙710,还得了新一代火龙的称号。上代16X起步不到800元的超高性价比组合,TFZKINGII耳机魅族HIFI解码耳放TFZKINGII这个长条形的透明包装虽然谈不上什么质感,但挺有特色的。魅族HIFI解码耳放的包装非常小巧,毕竟只是一根线而已。TFZKINGII耳机其实有三种色彩,最亮的蓝色面盖TFZKINGII耳机魅族HIFI解码耳放,极具性价比的初烧组合今年618的时候买了不少数码产品,魅族16s和OPPOR17Pro就在其中。虽然两款手机使用耳机必须使用转接头才行,但我一向使用无线耳机居多,影响也不大。可手上有条TFZKINGI发布会还未召开,华为Mate30Pro已遭全面曝光华为Mate30系列可以说是今年下半年最引人关注的国产旗舰手机,发布会将于9月19日20点召开。发布会未开,手机却是已经全面曝光。先是真机图被曝光,Pro版是刘海曲面瀑布屏,背面是
全球最大黑客组织匿名者宣布对俄发动网络战争!俄罗斯顶得住吗据俄罗斯卫星网25日报道,黑客组织匿名者(Anonymous)就俄罗斯在乌克兰的军事行动,宣布对俄罗斯发动网络战争,并声称对今日俄罗斯电视台(RT)遭受的网络攻击负责。该组织还表示4G网络升级到5G,需不需要换一个SIM卡?中国移动给出答案移动通信这些年发展速度非常快,从1G开始,到后面2G3G4G,每一次升级都是一次技术进步,大大促进了经济发展,提升了生活质量,4G网络持续了很多年,它的传输速率成百倍提升,使得我们史上第二大加密黑客事件NFT电竞区块链平台被盗6亿美元以太坊文JonathanPonciano事件概要专注于游戏的区块链平台RoninNetwork周二宣布,该公司上周遭到了黑客入侵,并被从其平台上提走了目前价值超过6亿美元的加密货币,这是加密货币是货币吗?它不被认同仅仅是动了银行的蛋糕?马克思曾经说过一句话,黄金天然是货币,货币天然不是黄金,大家从这里能看出来什么呢?大家有没有发现,从古代黄金就做为了货币,为什么当时选择拿黄金做为货币呢?一是因为它的稀缺性,二是它京东开始裁员了???真的假的?大家好!我是小静,点击右上方关注,每天分享我的自媒体写作。希望对你有帮助!昨天看到一篇报道,京东裁员了,又有大批失业人员了,这两年就业本身就挺困难的,京东大企业都开始裁员了,小企业OPPO和vivo老板不是段永平不要再被误解了给一些网友科普一个知识。OPPO和vivo老板是这两位陈明永和沈炜,并不是段永平!百科如有侵权联系删除都已经2022年了,还在说OPPO和vivo老板都移民到漂亮国了捂脸。说出来也特斯拉ModelY真香提车3个多月,特斯拉ModelY真实感受。先一句话概括这车优缺点都非常明显,但是喜欢,一个理由就够了。优点1。用车成本低,目前百公里用电15度左右,结合峰谷用电,真香,随着天气暖和远舢智能完成2亿元B轮融资,加速推进国产化AI战略布局创新型工业AIPaaS平台提供商远舢智能已于近日完成2亿元B轮融资,由赛富投资基金领投,上海国资委旗下上实国际创投和鼎和高达跟投,同时老股东东方富海六脉资本持续加码,元一资本为本轮京东京造推出1000W正弦波户外电源,支持100WPD快充电商平台京东旗下自营品牌京东京造产品线涉及多种品类,其中,消费电子配件已推出多款快充产品,如65W氮化镓充电器20000mAhPD充电宝无线充电器等。近日,京东京造入局户外电源品类中国互联网激荡20年经历跌宕起伏,结局只有一条路作者朱明琪来源正和岛2022年3月,无疑是在中国互联网历史上,载入史册的月份。俄乌冲突带来的地缘政治风险,来自美国证券交易委员会(SEC)的监管风险,给中概股带来了前所未有的考验和细聊AOP理论1什么是AOPAOP(AspectOrientProgramming)面向切面编程Aspect表示切面,给业务方法增加的功能,叫做切面。切面一般都是非业务功能,而且切面功能一般都是