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

网站的开发和建设有什么区别外贸网站优化公司

网站的开发和建设有什么区别,外贸网站优化公司,网站前台乱码,网站动画效果怎么做简介java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活,例如有这样的一个题目:5个学生一起参加考试,一共…

简介

java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活,例如有这样的一个题目:5个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束。分析这个题目:这是一个多线程(5个学生)分阶段问题(考试考试、第一题做完、第二题做完、第三题做完),所以很适合用Phaser解决这个问题。

实现代码

[java] view plaincopy
  1. import java.util.concurrent.Phaser;  
  2.   
  3. /*** 
  4.  *  下面说说Phaser的高级用法,在Phaser内有2个重要状态,分别是phase和party。 
  5.  *  phase就是阶段,初值为0,当所有的线程执行完本轮任务,同时开始下一轮任务时, 
  6.  *  意味着当前阶段已结束,进入到下一阶段,phase的值自动加1。party就是线程, 
  7.  *  party=4就意味着Phaser对象当前管理着4个线程。Phaser还有一个重要的方法经常需要被重载, 
  8.  *  那就是boolean onAdvance(int phase, int registeredParties)方法。此方法有2个作用: 
  9.  *  1、当每一个阶段执行完毕,此方法会被自动调用,因此,重载此方法写入的代码会在每个阶段执行完毕时执行, 
  10.  *  相当于CyclicBarrier的barrierAction。 
  11.  *  2、当此方法返回true时,意味着Phaser被终止,因此可以巧妙的设置此方法的返回值来终止所有线程。 
  12.  * @author liujun 
  13.  */  
  14. public class MyPhaser extends Phaser {  
  15.   
  16.     @Override  
  17.     protected boolean onAdvance(int phase, int registeredParties) { //在每个阶段执行完成后回调的方法  
  18.           
  19.         switch (phase) {  
  20.         case 0:  
  21.             return studentArrived();  
  22.         case 1:  
  23.             return finishFirstExercise();  
  24.         case 2:  
  25.             return finishSecondExercise();  
  26.         case 3:  
  27.             return finishExam();  
  28.         default:  
  29.             return true;  
  30.         }  
  31.           
  32.     }  
  33.       
  34.     private boolean studentArrived(){  
  35.         System.out.println("学生准备好了,学生人数:"+getRegisteredParties());  
  36.         return false;  
  37.     }  
  38.       
  39.     private boolean finishFirstExercise(){  
  40.         System.out.println("第一题所有学生做完");  
  41.         return false;  
  42.     }  
  43.       
  44.     private boolean finishSecondExercise(){  
  45.         System.out.println("第二题所有学生做完");  
  46.         return false;  
  47.     }  
  48.       
  49.     private boolean finishExam(){  
  50.         System.out.println("第三题所有学生做完,结束考试");  
  51.         return true;  
  52.     }  
  53.       
  54. }  


[java] view plaincopy
  1. import java.util.concurrent.Phaser;  
  2. import java.util.concurrent.TimeUnit;  
  3.   
  4. public class StudentTask implements Runnable {  
  5.   
  6.     private Phaser phaser;  
  7.       
  8.     public StudentTask(Phaser phaser) {  
  9.         this.phaser = phaser;  
  10.     }  
  11.   
  12.     @Override  
  13.     public void run() {  
  14.         System.out.println(Thread.currentThread().getName()+"到达考试");  
  15.         phaser.arriveAndAwaitAdvance();  
  16.           
  17.         System.out.println(Thread.currentThread().getName()+"做第1题时间...");  
  18.         doExercise1();  
  19.         System.out.println(Thread.currentThread().getName()+"做第1题完成...");  
  20.         phaser.arriveAndAwaitAdvance();  
  21.           
  22.         System.out.println(Thread.currentThread().getName()+"做第2题时间...");  
  23.         doExercise2();  
  24.         System.out.println(Thread.currentThread().getName()+"做第2题完成...");  
  25.         phaser.arriveAndAwaitAdvance();  
  26.           
  27.         System.out.println(Thread.currentThread().getName()+"做第3题时间...");  
  28.         doExercise3();  
  29.         System.out.println(Thread.currentThread().getName()+"做第3题完成...");  
  30.         phaser.arriveAndAwaitAdvance();  
  31.     }  
  32.   
  33.     private void doExercise1() {  
  34.         long duration = (long)(Math.random()*10);  
  35.         try {  
  36.             TimeUnit.SECONDS.sleep(duration);  
  37.         } catch (InterruptedException e) {  
  38.             e.printStackTrace();  
  39.         }  
  40.     }  
  41.       
  42.     private void doExercise2() {  
  43.         long duration = (long)(Math.random()*10);  
  44.         try {  
  45.             TimeUnit.SECONDS.sleep(duration);  
  46.         } catch (InterruptedException e) {  
  47.             e.printStackTrace();  
  48.         }  
  49.     }  
  50.       
  51.     private void doExercise3() {  
  52.         long duration = (long)(Math.random()*10);  
  53.         try {  
  54.             TimeUnit.SECONDS.sleep(duration);  
  55.         } catch (InterruptedException e) {  
  56.             e.printStackTrace();  
  57.         }  
  58.     }  
  59.       
  60. }  


[java] view plaincopy
  1. /** 
  2.  * 题目:5个学生参加考试,一共有三道题,要求所有学生到齐才能开始考试 
  3.  * ,全部做完第一题,才能继续做第二题,后面类似。 
  4.  *  
  5.  * Phaser有phase和party两个重要状态, 
  6.  * phase表示阶段,party表示每个阶段的线程个数, 
  7.  * 只有每个线程都执行了phaser.arriveAndAwaitAdvance(); 
  8.  * 才会进入下一个阶段,否则阻塞等待。 
  9.  * 例如题目中5个学生(线程)都条用phaser.arriveAndAwaitAdvance();就进入下一题 
  10.  * @author liujun 
  11.  */  
  12. public class Main {  
  13.   
  14.     public static void main(String[] args) {  
  15.         MyPhaser phaser = new MyPhaser();  
  16.         StudentTask[] studentTask = new StudentTask[5];  
  17.         for (int i = 0; i < studentTask.length; i++) {  
  18.             studentTask[i] = new StudentTask(phaser);  
  19.             phaser.register();  //注册一次表示phaser维护的线程个数  
  20.         }  
  21.           
  22.         Thread[] threads = new Thread[studentTask.length];  
  23.         for (int i = 0; i < studentTask.length; i++) {  
  24.             threads[i] = new Thread(studentTask[i], "Student "+i);  
  25.             threads[i].start();  
  26.         }  
  27.           
  28.         //等待所有线程执行结束  
  29.         for (int i = 0; i < studentTask.length; i++) {  
  30.             try {  
  31.                 threads[i].join();  
  32.             } catch (InterruptedException e) {  
  33.                 e.printStackTrace();  
  34.             }  
  35.         }  
  36.           
  37.         System.out.println("Phaser has finished:"+phaser.isTerminated());  
  38.           
  39.     }  
  40.       
  41. }  

结果

Student 0到达考试
Student 1到达考试
Student 4到达考试
Student 2到达考试
Student 3到达考试
学生准备好了5
Student 2做第1题时间...
Student 0做第1题时间...
Student 1做第1题时间...
Student 4做第1题时间...
Student 3做第1题时间...
Student 2做第1题完成...
Student 3做第1题完成...
Student 1做第1题完成...
Student 0做第1题完成...
Student 4做第1题完成...
第一题所有学生做完
Student 3做第2题时间...
Student 0做第2题时间...
Student 4做第2题时间...
Student 1做第2题时间...
Student 2做第2题时间...
Student 3做第2题完成...
Student 2做第2题完成...
Stud ent 0做第2题完成...
Student 1做第2题完成...
Student 4做第2题完成...
第二题所有学生做完
Student 0做第3题时间...
Student 3做第3题时间...
Student 2做第3题时间...
Student 4做第3题时间...
Student 1做第3题时间...
Student 1做第3题完成...
Student 0做第3题完成...
Student 2做第3题完成...
Student 3做第3题完成...
Student 4做第3题完成...
第三题所有学生做完,结束考试
Phaser has finished:true

原文链接:https://blog.csdn.net/u010739551/article/details/51083004

http://www.lbrq.cn/news/2463967.html

相关文章:

  • 企业网站优化公司公司员工培训内容有哪些
  • 高端网站建设服务最新新闻播报
  • 外贸建站独立站怎么做网络营销
  • 网站建设完成后怎么上传服务器防恶意点击软件
  • 红色色系做网站的配色sem推广和seo的区别
  • 云阳网站建设百度搜索关键词统计
  • cms网站开发网站域名解析
  • 广西城乡建设名网站2022网络热词30个
  • 营销赚钱网站东莞网站建设推广平台
  • 短网址转换长网址seo优化关键词排名优化
  • 青海wap网站建设公司百度自媒体怎么注册
  • 修改wordpress上传图片地址关键词优化心得
  • 怎样把网站打包做百度小程序百度推广电话销售好做吗
  • 平面设计师长逛的网站有哪些东莞网站制作十年乐云seo
  • 住房和城乡建设部网站登录重庆企业网站排名优化
  • 东莞市品牌网站建设价格今晚比分足球预测
  • 凡客有家seo关键词排名优化怎样收费
  • 地方网站优势营销型网站建设易网拓
  • 免费大型网站关键词排名网络推广
  • 网站描本链接怎么做全网搜索软件
  • 晋江做鞋子批发的网站培训心得体会怎么写
  • 建设银行网站怎么查自己账号吗网络营销外包公司
  • 传奇私服网站怎么建设做外贸用什么软件找客户
  • flash网页模板seo优化一般多少钱
  • 美食网站建设目的百度手机助手app下载官网
  • wordpress 离线编辑器南宁seo优化
  • 开发公司认领工程网站成都黑帽seo
  • 鞍山网站开发宜昌seo
  • access 数据库做网站chrome浏览器
  • 学校网站建设必要性百度精准搜索
  • Python - 100天从新手到大师 - Day6
  • 3020雕刻机脱机自定义指令
  • 【应急响应】进程隐藏技术与检测方式(二)
  • ESP32- 项目应用1 智能手表 之更新天气#4
  • 制造业新突破:AR 培训系统助力复杂操作轻松上手​
  • Docker4-容器化企业级应用