标准通网站建设,网络公司注册资金多少,长春网络有限公司,seo策略是什么一个同步辅助类#xff0c;在完成一组正在其他线程中执行的操作之前#xff0c;它允许一个或多个线程一直等待。 用给定的计数 初始化 CounDownLatch。由于调用了countDown() 方法#xff0c;所以在当前计数到达零之前,await()方法会一直受阻塞。之后#xff0c;会释放所有… 一个同步辅助类在完成一组正在其他线程中执行的操作之前它允许一个或多个线程一直等待。 用给定的计数 初始化 CounDownLatch。由于调用了countDown() 方法所以在当前计数到达零之前,await()方法会一直受阻塞。之后会释放所有等待的线程,await()的所有后续调用都将立即返回。这种现象只出现一次---计数无法被重置。如果需要重置计数请考虑使用CyclicBarrier。 CountDownLatch 是一个通用同步工具它有很多用途。将计数 1 初始化的 CountDownLatch 用作一个简单的开/关锁存器或入口在通过调用 countDown()的线程打开入口前所有调用 await()的线程都一直在入口处等待。用 N 初始化的 CountDownLatch 可以使一个线程在 N 个线程完成某项操作之前一直等待或者使其在某项操作完成 N 次之前一直等待。 CountDownLatch 的一个有用特性是它不要求调用 countDown 方法的线程等到计数到达零时才继续而在所有线程都能通过之前它只是阻止任何线程继续通过一个await()。 在接下来给出视频会议的例子来说明CountDownLacth的用法视频会议需要等待多有的参与者都到会后才能开始。视频会议 public class VedioConference implements Runnable{private CountDownLatch countDownLatch;public VedioConference(int count) {this.countDownLatch new CountDownLatch(count);}public void arrive(String name){System.out.println(参与者name到达);countDownLatch.countDown();System.out.println(视频会议还需要等待:countDownLatch.getCount()名参与者);}Overridepublic void run() {try {System.out.println(视频会议共有 :countDownLatch.getCount()名参与者);countDownLatch.await();System.out.println(所有参与者都已将到达 );System.out.println(开始会议...);} catch (InterruptedException e) {e.printStackTrace();}}
} 参与者 public class Participant implements Runnable {private VedioConference conference;private String name;public Participant(VedioConference conference, String name) {this.conference conference;this.name name;}Overridepublic void run() {try {//线程随机休息一段时间Thread.currentThread().sleep((int)(Math.random()*10));} catch (InterruptedException e) {e.printStackTrace();}//调用arrive()表示参与者已经到达conference.arrive(name);}
} 测试类 public class Main {public static void main(String[] args) {VedioConference conferencenew VedioConference(5);Thread conThreadnew Thread(conference);conThread.start();for (int i 0; i 5; i) {Participant participantnew Participant(conference, participanti);Thread threadnew Thread(participant);thread.start();}}
} 运行结果 视频会议共有 :5名参与者
参与者participant2到达
视频会议还需要等待:4名参与者
参与者participant3到达
视频会议还需要等待:3名参与者
参与者participant1到达
视频会议还需要等待:2名参与者
参与者participant4到达
视频会议还需要等待:1名参与者
参与者participant0到达
视频会议还需要等待:0名参与者
所有参与者都已将到达
开始会议... 内存一致性效果线程中调用 countDown() 之前的操作happen-before紧跟在从另一个线程中对应 await() 成功返回的操作。