//存放矩阵每行的查找结果
public class Result {private int data[];public Result(int size) {data=new int[size];}public void setData(int postion,int value){data[postion]=value;}public int[] getData(){return data;}
}
//查找线程
public class Searcher implements Runnable {private int fristRow;//起始行private int lastRow;//终止行private MatrixMock matrixMock;//要查找的矩阵private Result results;//保存查找结果private int number;//需要查找到数字private final CyclicBarrier barrier;public Searcher(int fristRow, int lastRow, MatrixMock matrixMock,Result results, int number, CyclicBarrier barrier) {this.fristRow = fristRow;this.lastRow = lastRow;this.matrixMock = matrixMock;this.results = results;this.number = number;this.barrier = barrier;}@Overridepublic void run() {int counter;System.out.println(Thread.currentThread().getName()+ ": Processing lines from " + fristRow + " to " + lastRow);for (int i=fristRow; i<lastRow;i++) {int row[]=matrixMock.getRow(i);counter=0;for (int j = 0; j <row.length; j++) {if(row[j]==number){counter++;}}results.setData(i, counter);}System.out.println(Thread.currentThread().getName()+":Lines processed");try {barrier.await();} catch (InterruptedException | BrokenBarrierException e){e.printStackTrace();}}
}
//合并查找结果
public class Grouper implements Runnable {private Result result;public Grouper(Result result) {this.result = result;}@Overridepublic void run() {int finalResult=0;System.out.println("Grouper: Processing results...");int data[]=result.getData();for (int i : data) {finalResult+=i;}System.out.println("Grouper: Total result:"+finalResult);}
}
public class GrouperMain {public static void main(String[] args) {final int ROWS = 10000;final int NUMBRES = 1000;final int SEARCH = 5;final int PARTICIPANTS = 5;final int LINES_PARTICIPANT = 2000;MatrixMock mock = new MatrixMock(ROWS, NUMBRES, SEARCH);Result result = new Result(ROWS);Grouper grouper = new Grouper(result);CyclicBarrier barrier = new CyclicBarrier(PARTICIPANTS, grouper);Searcher searchers[] = new Searcher[PARTICIPANTS];for (int i = 0; i < PARTICIPANTS; i++) {searchers[i] = new Searcher(i * LINES_PARTICIPANT, i* LINES_PARTICIPANT + LINES_PARTICIPANT, mock, result, 5,barrier);Thread thread = new Thread(searchers[i]);thread.start();}System.out.println("Main: The Main Thread has finnished");}
}

运行结果:

Mock:There are:1000810 number in generated data
Thread-0: Processing lines from 0 to 2000
Thread-1: Processing lines from 2000 to 4000
Thread-2: Processing lines from 4000 to 6000
Thread-4: Processing lines from 8000 to 10000
Main: The Main Thread has finnished
Thread-3: Processing lines from 6000 to 8000
Thread-3:Lines processed
Thread-1:Lines processed
Thread-2:Lines processed
Thread-4:Lines processed
Thread-0:Lines processed
Grouper: Processing results...
Grouper: Total result:1000810

应用场景:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。


尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili尚学堂给同学们带来全新的Java300集课程啦本课程为Java300集2022版第一季,配合最新版的Java课程,所有视频重新录制,课件所有图形做了重新绘制和配色,图解学习Java,让学习成为一种享受本套教程专门为零基础学员而制,适合准备入行Java开发的零基础学员,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。后续课https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.999.0.0

零基础java自学流程-Java语言高级369相关推荐

  1. 零基础java自学流程-Java语言高级534

    BIO BIO(Blocking I/O),同步阻塞,实现模式为一个连接一个线程,即当有客户端连接时,服务器端需为其单独分配一个线程,如果该连接不做任何操作就会造成不必要的线程开销.BIO是传统的Ja ...

  2. 零基础java自学流程-Java语言高级577

    HTTP Request header 使用Fiddler 能很方便的查看Reques header, 点击Inspectors tab ->Request tab-> headers  ...

  3. 零基础java自学流程-Java语言高级432

    (4)TIDYING 当执行shutdown()或shutdownNow()之后,如果所有任务已中止,且工作线程数量为0,就会进入这个状态. final void tryTerminate() {fo ...

  4. 零基础java自学流程-Java语言高级269

    yeild 一个调用yield方法的线程,是要告诉虚拟机它乐意让其他线程占用自己的位置,yield将当前线程由运行状态置为就绪状态,来达到让步的目的,但是刚进入就绪状态的线程也可能马上进入运行状态. ...

  5. 零基础怎么自学Java?自学Java有什么误区?

    目前在中国众多行业中,极具发展潜力的就是Java软件开发工程师.学Java的人也是越来越多.实际上在学习Java编程之前需要先学习一些编程基础.新手往往无非进行系统的学习,主要原因是自己搜集信息较为零 ...

  6. 零基础,自学JAVA编程需要多长时间才能学完?

    现在不少朋友在问:零基础学Java需要花多少时间?在你开始学一门技术之前,你也得进行各个方面的考察,特别是时间方面你得仔细的思考,因为时间短,这是人之喜见的,要是时间长,那么你就会产生焦虑.不安.自我 ...

  7. Java零基础好学吗?Java该怎么学?

    Java零基础好学吗?Java该怎么学?在IT行业中,Java开发工程师是一个很吃香的职业,薪资水平也是几乎过万,许多人想转行Java开发,但又担心零基础能不能学会,学起来有多难,如果是零基础自学Ja ...

  8. 零基础小白如何学会Java?

    Java作为目前使用最广泛的编程语言,自身在常见的企业级业务应用程序以及Android应用程序等方面都有突出的表现.作为跨平台语言,具有安全性.易用性.通用性等特点,被特意设计用于互联网的分布式环境. ...

  9. 零基础适合学python吗-零基础更适合学习Java还是python?

    原标题:零基础更适合学习Java还是python? 最近有小伙伴向云和数据小编咨询,说想学习一门编程语言,但是没有任何基础,问是学习Java好还是学python更合适?对于这位小伙伴的问题,小编觉得有 ...

最新文章

  1. 图像形态学(opencv),运行后通过在屏幕上输入对应指令完成相对应的形态学方法。
  2. 在mysql查询数据库密码_如何查询mysql数据库密码
  3. (超级详细)jit的介绍和用法
  4. Forefront_TMG_2010-TMG建立Remote ***
  5. xp系统怎么连接云服务器,xp系统怎么连接云服务器
  6. Spring Cloud Alibaba - 20 Nacos StandAlone模式下的数据存储(Derby)及新增登录用户
  7. 鸿蒙 电视 安卓,华为鸿蒙2.0、EMUI 11齐发 打通手机、电视、PC全平台
  8. python 跳一跳辅助_使用Python制作微信跳一跳辅助
  9. linux ftp站点名称,Linux ftp命令的使用方法有哪些
  10. MongoDB-集群搭建
  11. 深入浅出强化学习_皋兰县举办科级干部学习贯彻党的十九届五中全会精神培训班...
  12. JavaScript技巧[转载]
  13. 如何开发自己的股票软件105
  14. 单片机原理与应用复习
  15. 不读后悔:风口上的仓储自动化
  16. 《人工智能狂潮》读后感——什么是人工智能?(一)
  17. 异次元骇客、虚拟机和造物主
  18. java实现 洛谷 P1427 小鱼的数字游戏
  19. Cramér‐von Mises检验
  20. 中银泰定期存款理财技巧

热门文章

  1. html5文字段落特效,7款震撼人心的HTML5文字特效
  2. 响铃:刚需之下,代泊真能冷启动汽车后市场?
  3. 戴尔服务器带液晶显示,戴尔机架R730外观设计_戴尔服务器_服务器评测与技术-中关村在线...
  4. python hackrf_GnuRadio在HackRF打开的情况下无法运行OS X 10.9.4
  5. NetConf简介之一篇文章读懂NetConf
  6. win10添加环境变量后没用_今天告诉你Win10系统配置环境变量未生效的完全解决教程...
  7. STM32之TIM-定时器的使用
  8. 曲奇视频观看影视剧非常不错的一个平台app
  9. 基于产生式系统的小型专家系统--动物识别
  10. vue页面的渲染过程