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

旅游网站建设项目规划书百度指数查询官方下载

旅游网站建设项目规划书,百度指数查询官方下载,网站备案域名更改吗,php和wordpressCountDownLatch倒计数锁存器 CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行 CountDownLatch用法 构造方法:CountDownLatch(int count),count指定等待的条件数(任务…

CountDownLatch倒计数锁存器

CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行

CountDownLatch用法

  1. 构造方法:CountDownLatch(int count),count指定等待的条件数(任务数、操作数),不可再更改
  2. 等待方法:await(),阻塞等待线程直到count减少为0,count为0时,不会阻塞,继续执行
  3. boolean await(long timeout,TimeUnit
    unit):可以设置超时时间的await方法,返回true表示等待条件到达;false表示条件未来到达,但超时了
  4. long getCount():获取当前计数值,常用于调试或者测试
    ps:CountDownLatch注意事项:只可使用一次,不能重复使用,计数变为0之后,就不可再用

CountDownLatch适用场景

  1. 等待多个条件完成,countDownLatch(N)这个多个条件可以是:等待N个线程、等待N个操作、等待某操作的N次执行
  2. 用于并发测试,等待多个线程一起出发

CountDownLatch例子

import java.util.Optional;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.stream.IntStream;public class JDKCountDown {private static final Random random = new Random(System.currentTimeMillis());public static void main(String[] args) throws InterruptedException {Optional.of("准备多线程处理任务。").ifPresent(System.out::println);final CountDownLatch countDownLatch = new CountDownLatch(5);IntStream.rangeClosed(1,5).forEach(i -> new Thread(()->{try {Optional.of("线程" + Thread.currentThread().getName() + " 开始执行任务。").ifPresent(System.out::println);Thread.sleep(random.nextInt(1000));Optional.of("线程" + Thread.currentThread().getName() + " 执行任务结束。").ifPresent(System.out::println);} catch (InterruptedException e) {e.printStackTrace();}countDownLatch.countDown();}, "Thread-"+i).start());countDownLatch.await();Optional.of("多线程处理任务结束。准备第二阶段的工作").ifPresent(System.out::println);Optional.of("------------------------------------").ifPresent(System.out::println);Optional.of("FINISH").ifPresent(System.out::println);}
}

执行之后的结果

准备多线程处理任务。
线程Thread-3 开始执行任务。
线程Thread-4 开始执行任务。
线程Thread-5 开始执行任务。
线程Thread-2 开始执行任务。
线程Thread-1 开始执行任务。
线程Thread-2 执行任务结束。
线程Thread-1 执行任务结束。
线程Thread-3 执行任务结束。
线程Thread-5 执行任务结束。
线程Thread-4 执行任务结束。
多线程处理任务结束。准备第二阶段的工作
------------------------------------
FINISH

我们手写一个简单SimpleCountDown

1.需要一个totalCount指定等待的条件数(任务数、操作数)
2.需要一个countDown计算有几个线程 结束了

上代码
/*** 简单倒计时工具类,用于多线程间协调完成计数操作*/
public class SimpleCountDown {/** 总需要达到的倒计数次数(不可变) */private final int totalCount;/** 当前倒计数值 */private int countDown;/** 是否被取消(volatile保证可见性) */private volatile boolean canceled = false;/*** 构造方法* @param totalCount 需要完成的总倒计数次数*/public SimpleCountDown(int totalCount) {this.totalCount = totalCount;}/*** 执行一次倒计数操作(线程安全)* <p>增加当前计数值并通知所有等待线程</p>*/public void down(){synchronized (this){this.countDown++;this.notifyAll(); // 通知所有等待线程检查条件}}/*** 等待直到完成所有倒计数操作* @throws InterruptedException 若当前线程被中断则抛出异常*/public void await() throws InterruptedException {synchronized (this){while (countDown != totalCount){ // 使用while防止虚假唤醒this.wait();}}}
}
测试类
import java.util.Optional;
import java.util.Random;
import java.util.stream.IntStream;/*** 演示SimpleCountDown倒计时门闩的使用示例类*/
public class SimpleCountDownClient {// 随机数生成器,用于模拟线程任务的随机执行时间private static final Random random = new Random(System.currentTimeMillis());public static void main(String[] args) throws InterruptedException {// 输出任务开始提示Optional.of("准备多线程处理任务。").ifPresent(System.out::println);// 初始化计数器为5,表示需要等待5个线程完成final SimpleCountDown countDownLatch = new SimpleCountDown(5);// 启动5个线程执行任务IntStream.rangeClosed(1, 5).forEach(i -> {new Thread(() -> {try {// 线程任务开始通知Optional.of("线程" + Thread.currentThread().getName() + " 开始执行任务。").ifPresent(System.out::println);// 模拟随机执行时间(0-1000毫秒)Thread.sleep(random.nextInt(1000));// 任务完成通知Optional.of("线程" + Thread.currentThread().getName() + " 执行任务结束。").ifPresent(System.out::println);} catch (InterruptedException e) {e.printStackTrace();} finally {// 通知计数器完成一个任务countDownLatch.down();}}, "Thread-" + i).start();});// 阻塞等待所有线程完成countDownLatch.await();// 所有线程完成后输出后续阶段提示Optional.of("多线程处理任务结束。准备第二阶段的工作").ifPresent(System.out::println);Optional.of("------------------------------------").ifPresent(System.out::println);Optional.of("FINISH").ifPresent(System.out::println);}
}

执行的结果

准备多线程处理任务。
线程Thread-1 开始执行任务。
线程Thread-5 开始执行任务。
线程Thread-3 开始执行任务。
线程Thread-4 开始执行任务。
线程Thread-2 开始执行任务。
线程Thread-5 执行任务结束。
线程Thread-1 执行任务结束。
线程Thread-2 执行任务结束。
线程Thread-3 执行任务结束。
线程Thread-4 执行任务结束。
多线程处理任务结束。准备第二阶段的工作
------------------------------------
FINISH
http://www.lryc.cn/news/616733.html

相关文章:

  • 用香港服务器建网站做微商揭阳seo推广公司
  • 网站功能定制合同网上国网app
  • html5可以做手机网站吗企业网络营销业务
  • 主流建站开源程序有哪些百度站长工具抓取诊断
  • 如何购买网站域名最好看免费观看高清视频了
  • 电商网站建设电话seo上海推广公司
  • 奶茶店面设计企业网站优化解决方案
  • 做软装什么网站可以cfa三级和一二级关系大吗
  • 网站布局方法分类重庆seowhy整站优化
  • 进入城乡建设网站怎么竣工备案seo优化教学视频
  • 建设网站哪家公司比较好外贸网站建设公司哪家好
  • 四川建设网站公司如何制作企业网站
  • 做营销型网站一般要多少钱推广app的营销方案
  • 做服务网站公司网站如何推广
  • 为什么做pc网站营销策划方案范文
  • 美国互联网公司裁员惠州seo网络推广
  • 手机网站开发解决方案沈阳今日新闻头条
  • 合肥做公司网站联系方式整站优化的公司
  • 品牌的佛山网站建设宝鸡seo优化
  • 用wordpress做的网站有哪些广告推广方案怎么写
  • 临沂网站建设培训百度手机助手安卓版下载
  • 网站建设致谢seo优化教程自学
  • 怎样做微信挂机平台网站德州网站建设优化
  • 注册表怎么做动态网站手机网站制作平台
  • 深圳做网站那里好网络推广的方法有
  • 网站建设需要注册42类吗腾讯广告推广平台入口
  • 网站一般做哪些测试西安百度推广电话
  • 网站建站需求怎么做网站教程
  • 电商网站建设源代码电商网站设计
  • 蛋白质结构预测工具网站开发廊坊网站