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

网站关键词布局图/百度一下你就知道网页

网站关键词布局图,百度一下你就知道网页,福州网seo,郴州做网站ku0735CountDownLatch从名字可以看出,CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后…

CountDownLatch

从名字可以看出,CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。

CountDownLatch最重要的方法是countDown()和await(),前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了。

一个CountDouwnLatch实例是不能重复使用的,也就是说它是一次性的,锁一经被打开就不能再关闭使用了,如果想重复使用,请考虑使用CyclicBarrier。

下面的例子简单的说明了CountDownLatch的使用方法,模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束。

Java代码

0818b9ca8b590ca3270a3433284dd417.png

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class Test {

public static void main(String[] args) throws InterruptedException {

// 开始的倒数锁

final CountDownLatch begin = new CountDownLatch(1);

// 结束的倒数锁

final CountDownLatch end = new CountDownLatch(10);

// 十名选手

final ExecutorService exec = Executors.newFixedThreadPool(10);

for (int index = 0; index 

final int NO = index + 1;

Runnable run = new Runnable() {

public void run() {

try {

begin.await();

Thread.sleep((long) (Math.random() * 10000));

System.out.println("No." + NO + " arrived");

} catch (InterruptedException e) {

} finally {

end.countDown();

}

}

};

exec.submit(run);

}

System.out.println("Game Start");

begin.countDown();

end.await();

System.out.println("Game Over");

exec.shutdown();

}

}

-----------------------------------------------------------------

Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。

你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。

CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。

举个例子,有三个工人在为老板干活,这个老板有一个习惯,就是当三个工人把一天的活都干完了的时候,他就来检查所有工人所干的活。记住这个条件:三个工人先全部干完活,老板才检查。所以在这里用Java代码设计两个类,Worker代表工人,Boss代表老板,具体的代码实现如下:

Java代码

0818b9ca8b590ca3270a3433284dd417.png

package org.zapldy.concurrent;

import java.util.Random;

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.TimeUnit;

public class Worker implements Runnable{

private CountDownLatch downLatch;

private String name;

public Worker(CountDownLatch downLatch, String name){

this.downLatch = downLatch;

this.name = name;

}

public void run() {

this.doWork();

try{

TimeUnit.SECONDS.sleep(new Random().nextInt(10));

}catch(InterruptedException ie){

}

System.out.println(this.name + "活干完了!");

this.downLatch.countDown();

}

private void doWork(){

System.out.println(this.name + "正在干活!");

}

}

Java代码

0818b9ca8b590ca3270a3433284dd417.png

package org.zapldy.concurrent;

import java.util.concurrent.CountDownLatch;

public class Boss implements Runnable {

private CountDownLatch downLatch;

public Boss(CountDownLatch downLatch){

this.downLatch = downLatch;

}

public void run() {

System.out.println("老板正在等所有的工人干完活......");

try {

this.downLatch.await();

} catch (InterruptedException e) {

}

System.out.println("工人活都干完了,老板开始检查了!");

}

}

Java代码

0818b9ca8b590ca3270a3433284dd417.png

package org.zapldy.concurrent;

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class CountDownLatchDemo {

public static void main(String[] args) {

ExecutorService executor = Executors.newCachedThreadPool();

CountDownLatch latch = new CountDownLatch(3);

Worker w1 = new Worker(latch,"张三");

Worker w2 = new Worker(latch,"李四");

Worker w3 = new Worker(latch,"王二");

Boss boss = new Boss(latch);

executor.execute(w3);

executor.execute(w2);

executor.execute(w1);

executor.execute(boss);

executor.shutdown();

}

}

当你运行CountDownLatchDemo这个对象的时候,你会发现是等所有的工人都干完了活,老板才来检查,下面是我本地机器上运行的一次结果,可以肯定的每次运行的结果可能与下面不一样,但老板检查永远是在后面的。

Java代码

0818b9ca8b590ca3270a3433284dd417.png

王二正在干活!

李四正在干活!

老板正在等所有的工人干完活......

张三正在干活!

张三活干完了!

王二活干完了!

李四活干完了!

工人活都干完了,老板开始检查了!

好了,就写到这里,睡觉去了!

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

相关文章:

  • 小区服务网站开发论文/百度地图疫情实时动态
  • 商丘市建立网站公司/seo搜索引擎优化平台
  • asp网站出现乱码/百度知道问答
  • 网络营销seo优化/seo手机端排名软件
  • 做动态logo网站/软文模板app
  • 一般做个网站多少钱/国家大事新闻近三天
  • 扬中如何优化网站/站长之家app
  • 网站开发用户需求分析/seo优化工程师
  • 开锁做网站怎么样/网站开发制作培训学校
  • 深圳网站设计九曲网站建设/西安网站优化培训
  • 梅州住房和建设局网站/推广教程
  • 泰州网站建设报价/久久seo正规吗
  • 网站开发与软件开发区别/网站流量排名查询工具
  • 一站式网站建设报价/bing搜索引擎国内版
  • 电子商务网站的建设和维护论文/东莞网站到首页排名
  • 英国T4学生签证 可以做网站吗/百度认证
  • 自助游网站开发分析报告总结/营销培训课程ppt
  • 网页设计模板的网站/做百度推广的业务员电话
  • 建材做哪些网站/谷歌seo公司
  • html网页设计代码范文制作旅游景点/郑州seo代理外包公司
  • 作图网站/app推广软件
  • b站怎么推广自己的视频/百度推广开户费
  • 梅州建网站/广告推广赚钱在哪接
  • 昆明网站制作策划/成都网络推广哪家好
  • 客户为什么要做网站/seo关键词怎么填
  • iis7 添加网站/怎么找需要推广的商家
  • 免x网站/站内推广的方法和工具
  • wordpress相册插件中文/seo优化技术招聘
  • 做网站服务器e3/如何在百度搜索排名靠前
  • 建一个门户网站多少钱/怎么做百度关键词排名
  • 【运维基础】Linux 进程调度管理
  • 在幸狐RV1106板子上用gcc14.2本地编译安装samba-4.22.3服务器,并且支持XP系统访问共享文件夹
  • Redis实战(4)-- BitMap结构与使用
  • 关于windows虚拟机无法联网问题
  • C++反射
  • Spring AI 海运管理应用