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

整站优化价格设计上海展会2023

整站优化价格,设计上海展会2023,网站开发开题报告,在线做图软件文章目录 学习链接CountDownLatchCountDownLatch类的作用类的主要方法介绍图解await和countDown方法两个典型用法注意点总结示例CountDownLatchDemo1CountDownLatchDemo2CountDownLatchDemo1And2 CyclicBarrierCyclicBarrier循环栅栏CyclicBarrier和CountDownLatch的区别示例Cy… 文章目录 学习链接CountDownLatchCountDownLatch类的作用类的主要方法介绍图解await和countDown方法两个典型用法注意点总结示例CountDownLatchDemo1CountDownLatchDemo2CountDownLatchDemo1And2 CyclicBarrierCyclicBarrier循环栅栏CyclicBarrier和CountDownLatch的区别示例CyclicBarrierDemo SemaphoreSemaphore信号量Semaphore应用实例信号量的使用流程信号量主要方法介绍信号量的特殊用法注意点示例SemaphoreDemo ConditionCondition的作用signalAll和signal的区别Condition注意点示例Condition1Condition2 学习链接 Java并发编程第9讲——CountDownLatch、CyclicBarrier和Semaphore万字详解 CountDownLatch CountDownLatch类的作用 类的主要方法介绍 图解await和countDown方法 两个典型用法 注意点 总结 示例 CountDownLatchDemo1 /*** 描述工厂中质检5个工人检查所有人都认为通过才通过*/ public class CountDownLatchDemo1 {public static void main(String[] args) throws InterruptedException {CountDownLatch latch new CountDownLatch(5);ExecutorService service Executors.newFixedThreadPool(5);for (int i 0; i 5; i) {final int no i 1;Runnable runnable new Runnable() {Overridepublic void run() {try {Thread.sleep((long) (Math.random() * 10000));System.out.println(No. no 完成了检查。);} catch (InterruptedException e) {e.printStackTrace();} finally {latch.countDown();}}};service.submit(runnable);}System.out.println(等待5个人检查完.....);latch.await(); // 这里也可以设置超时等待时间, 如: latch.await(5, TimeUnit.SECONDS);System.out.println(所有人都完成了工作进入下一个环节。);} } CountDownLatchDemo2 /*** 描述模拟100米跑步5名选手都准备好了只等裁判员一声令下所有人同时开始跑步。*/ public class CountDownLatchDemo2 {public static void main(String[] args) throws InterruptedException {CountDownLatch begin new CountDownLatch(1);ExecutorService service Executors.newFixedThreadPool(5);for (int i 0; i 5; i) {final int no i 1;Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(No. no 准备完毕等待发令枪);try {begin.await();System.out.println(No. no 开始跑步了);} catch (InterruptedException e) {e.printStackTrace();}}};service.submit(runnable);}//裁判员检查发令枪...Thread.sleep(5000);System.out.println(发令枪响比赛开始);begin.countDown();} }CountDownLatchDemo1And2 /*** 描述模拟100米跑步5名选手都准备好了只等裁判员一声令下所有人同时开始跑步。当所有人都到终点后比赛结束。*/ public class CountDownLatchDemo1And2 {public static void main(String[] args) throws InterruptedException {CountDownLatch begin new CountDownLatch(1);CountDownLatch end new CountDownLatch(5);ExecutorService service Executors.newFixedThreadPool(5);for (int i 0; i 5; i) {final int no i 1;Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(No. no 准备完毕等待发令枪);try {begin.await();System.out.println(No. no 开始跑步了);Thread.sleep((long) (Math.random() * 10000));System.out.println(No. no 跑到终点了);} catch (InterruptedException e) {e.printStackTrace();} finally {end.countDown();}}};service.submit(runnable);}//裁判员检查发令枪...Thread.sleep(5000);System.out.println(发令枪响比赛开始);begin.countDown();end.await();System.out.println(所有人到达终点比赛结束);} } CyclicBarrier CyclicBarrier循环栅栏 CyclicBarrier和CountDownLatch的区别 示例 CyclicBarrierDemo /*** 描述 演示CyclicBarrier*/ public class CyclicBarrierDemo {public static void main(String[] args) {// 5个线程都调用await时才执行Runnable然后5个线程接着执行CyclicBarrier cyclicBarrier new CyclicBarrier(5, new Runnable() {Overridepublic void run() {System.out.println(所有人都到场了 大家统一出发);}});// 这里循环10次目的是验证CyclicBarrier可重用for (int i 0; i 10; i) {new Thread(new Task(i, cyclicBarrier)).start();}}static class Task implements Runnable {private int id;private CyclicBarrier cyclicBarrier;public Task(int id, CyclicBarrier cyclicBarrier) {this.id id;this.cyclicBarrier cyclicBarrier;}Overridepublic void run() {System.out.println(线程 id 现在前往集合地点);try {Thread.sleep((long) (Math.random() * 10000));System.out.println(线程 id 到了集合地点开始等待其他人到达);cyclicBarrier.await();System.out.println(线程 id 出发了);} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}} } Semaphore Semaphore信号量 Semaphore应用实例 信号量的使用流程 信号量主要方法介绍 信号量的特殊用法 注意点 示例 SemaphoreDemo /*** 描述 演示Semaphore用法*/ public class SemaphoreDemo {static Semaphore semaphore new Semaphore(3, true);public static void main(String[] args) {ExecutorService service Executors.newFixedThreadPool(50);for (int i 0; i 100; i) {service.submit(new Task());}service.shutdown();}static class Task implements Runnable {Overridepublic void run() {try {semaphore.acquire(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() 拿到了许可证);try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() 释放了许可证);semaphore.release(1);}} }Condition Condition的作用 signalAll和signal的区别 Condition注意点 示例 Condition1 /*** 描述演示Condition的基本用法*/ public class ConditionDemo1 {private ReentrantLock lock new ReentrantLock();private Condition condition lock.newCondition();void method1() throws InterruptedException {lock.lock();try{System.out.println(条件不满足开始await);condition.await(); // 可设置超时时间进入条件等待: condition.await(1, TimeUnit.SECONDS);System.out.println(条件满足了开始执行后续的任务);}finally {lock.unlock();}}void method2() {lock.lock();try{System.out.println(准备工作完成唤醒其他的线程);condition.signal();}finally {lock.unlock();}}public static void main(String[] args) throws InterruptedException {ConditionDemo1 conditionDemo1 new ConditionDemo1();new Thread(new Runnable() {Overridepublic void run() {try {Thread.sleep(1000);conditionDemo1.method2();} catch (InterruptedException e) {e.printStackTrace();}}}).start();conditionDemo1.method1();} }Condition2 /*** 描述 演示用Condition实现生产者消费者模式*/ public class ConditionDemo2 {private int queueSize 10;private PriorityQueueInteger queue new PriorityQueueInteger(queueSize);private Lock lock new ReentrantLock();// 当队列不满足 不满的条件时生产者进入等待// 当队列不满时唤醒在此条件中等待的线程private Condition notFull lock.newCondition();// 当队列不满足 不空的条件时消费者进入等待// 当队列不空时唤醒在此条件中等待的线程private Condition notEmpty lock.newCondition();public static void main(String[] args) {ConditionDemo2 conditionDemo2 new ConditionDemo2();Producer producer conditionDemo2.new Producer();Consumer consumer conditionDemo2.new Consumer();producer.start();consumer.start();}class Consumer extends Thread {Overridepublic void run() {consume();}private void consume() {while (true) {lock.lock();try {// 使用while, 防止了虚假唤醒while (queue.size() 0) {System.out.println(队列空等待数据);try {// 当队列为空时进入等待// 当队列不为空时被唤醒notEmpty.await(); // 进入条件队列中等待并释放锁此处被唤醒时仍然需要获取到锁才能往下运行} catch (InterruptedException e) {e.printStackTrace();}}// 走到这里说明队列肯定不为空了// 因为先持有了锁, 所以保证了操作的原子性。其它此时尝试从该队列中获取数据的线程将进入锁等待环节queue.poll();// 因为拿到了锁, 并且从队列中获取了数据, 队列此时肯定不为满了, 所以可以唤醒生产者线程去生产notFull.signalAll();System.out.println(从队列里取走了一个数据队列剩余 queue.size() 个元素);} finally {lock.unlock();}}}}class Producer extends Thread {Overridepublic void run() {produce();}private void produce() {while (true) {lock.lock();try {// 使用while, 防止了虚假唤醒while (queue.size() queueSize) {System.out.println(队列满等待有空余);try {// 当队列为满时进入等待// 当队列为不满时被唤醒notFull.await(); // 进入条件队列中等待并释放锁此处被唤醒时仍然需要获取到锁才能往下运行} catch (InterruptedException e) {e.printStackTrace();}}// 走到这里说明队列肯定不为满了// 因为先持有了锁, 所以保证了操作的原子性。其它此时尝试往该队列中添加数据的线程将进入锁等待环节queue.offer(1);// 因为拿到了锁, 并且往该队列中添加了数据, 队列此时肯定不为空了, 所以可以唤醒消费者者线程去消费notEmpty.signalAll();System.out.println(向队列插入了一个元素队列剩余空间 (queueSize - queue.size()));} finally {lock.unlock();}}}}}
http://www.w-s-a.com/news/53258/

相关文章:

  • 丽江网站设计公司专业公司网站设计企业
  • iis怎么建设网站特色产品推广方案
  • 道路建设网站专题品牌网站建设特色大蝌蚪
  • 网站开发组合 所有组合如何做com的网站
  • 电商网站怎么做的Wordpress 报表的插件
  • 纹理网站推荐买了两台服务器可以做网站吗
  • 机关公文写作网站南宁互联网推广
  • 五指山网站开发价格免费申请网站域名
  • 帝国音乐网站怎么做数据表电脑优化软件
  • 做国外网站收款怎么收建筑人才招聘网站
  • 毕设做桌面端还是网站sns社交网站 建设
  • 建设一个网站需要注意哪些内容wordpress 进销存
  • 沈阳市建设局网站sem优化师是什么意思
  • 餐饮vi设计公司网站排名优化方法讲解
  • 无线昆明官方网站可以做书的网站
  • 信誉最好的20个网投网站凡科网站建设之后怎么删除
  • 天津网站开发技术广州网站优化公司排名
  • 养老做增减的网站医院网站怎么做优化排名
  • 企业网站的推广方法有哪些上海猎头公司前十名
  • 电商网站建设建议免费下载app
  • 网站搭建设计是什么意思百度地图放到网站上
  • 东莞网站建设市场分析淘宝网站框架
  • 新网站多久被百度收录网站空间单位
  • 2017常用的网站昆明网站代理
  • 成都海鸥手表网站安阳网站建设策划
  • 做好的网站怎么发布做网站应该做哪方面的
  • 可以找厂家的网站品牌创意型网站开发
  • 有没有做牛羊角的网站电商网站报价
  • 网站建设行业咨讯文章网站兼容模式怎么设置
  • 商务网站建设概念东莞做网站的公司吗