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

ps图做ppt模板下载网站有哪些校园网络拓扑图及网络方案

ps图做ppt模板下载网站有哪些,校园网络拓扑图及网络方案,网站全程设计技术,购买了域名之后怎么做网站线程协作工具类 CountDownLatch倒数门闩Semaphore信号量CyclicBarrier循环栅栏CyclicBarrier和CountDownLatch区别: Condition接口(条件对象) 转自 极客时间 线程协作工具类就是帮助程序员更容易的让线程之间进行协作,来完成某个业务功能。 CountDownLatch倒数门闩…

线程协作工具类

  • CountDownLatch倒数门闩
  • Semaphore信号量
  • CyclicBarrier循环栅栏
    • CyclicBarrier和CountDownLatch区别:
  • Condition接口(条件对象)

转自 极客时间

线程协作工具类就是帮助程序员更容易的让线程之间进行协作,来完成某个业务功能。

在这里插入图片描述

CountDownLatch倒数门闩

在这里插入图片描述


import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/*** CountDownLatch案例:6个程序猿加班* 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行*/
public class Demo11CountDownLatch {public static void main(String[] args) throws InterruptedException {//计数门闩CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 1; i <= 6; i++) {new Thread(()->{try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace(); }System.out.println(Thread.currentThread().getName() + "\t上完班,离开公司");countDownLatch.countDown();}, String.valueOf(i)).start();}new Thread(()->{try {countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t卷王最后关灯走人");} catch (InterruptedException e) {e.printStackTrace();}}, "7").start();}
}

Semaphore信号量

在这里插入图片描述

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;/*** Semaphore案例:三辆小汽车抢车位* Semaphore信号量主要作用:1.用于多个共享资源的互斥使用,2.用于并发线程数的控制*/
public class Demo12Semaphore {public static void main(String[] args) {//模拟资源类,有3个空车位Semaphore semaphore = new Semaphore(3);for (int i = 1; i <= 6; i++) {new Thread(()->{try{//占有资源semaphore.acquire();System.out.println(Thread.currentThread().getName()+"\t抢到车位");try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) {e.printStackTrace(); }System.out.println(Thread.currentThread().getName()+"\t停车3秒后离开车位");} catch (Exception e) {e.printStackTrace();} finally {//释放资源semaphore.release();}}, "Thread-Car-"+String.valueOf(i)).start();}}
}

CyclicBarrier循环栅栏

在这里插入图片描述

import java.util.concurrent.CyclicBarrier;/*** 案例:集齐7龙珠召唤神龙*/
public class Demo13CyclicBarrier {public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{System.out.println("======召唤神龙");});for (int i = 1; i <= 14; i++) {final int tempInt = i;new Thread(()->{try {System.out.println(Thread.currentThread().getName() + "\t收集到第" + tempInt + "颗龙珠");cyclicBarrier.await();System.out.println(Thread.currentThread().getName() + "\t第" + tempInt + "颗龙珠飞走了");} catch (Exception e) {e.printStackTrace();}}, "Thread-"+String.valueOf(i)).start();}}
}

CyclicBarrier和CountDownLatch区别:

在这里插入图片描述

Condition接口(条件对象)

在这里插入图片描述

import java.util.Collections;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** 案例:Tony仨小哥洗剪吹* 演示多线程之间按顺序调用,实现A->B->C* 三个线程Tony要求如下:*   tony雄雄-洗头,tony超超-理发,tony麦麦-吹干*   。。。*   tony雄雄-洗头,tony超超-理发,tony麦麦-吹干*  依次来10轮*/
public class Demo14ConditionDemo {public static void main(String[] args) {ShareData shareData = new ShareData();new Thread(()->{for (int i = 0; i < 10; i++) {shareData.wash();}}, "tony-雄雄").start();new Thread(()->{for (int i = 0; i < 10; i++) {shareData.cut();}}, "tony-超超").start();new Thread(()->{for (int i = 0; i < 10; i++) {shareData.cook();}}, "tony-麦麦").start();}
}
class ShareData {private volatile int number = 1; //tony-雄雄:1, tony-超超:2, tony-麦麦:3private Lock lock = new ReentrantLock();private Condition c1 = lock.newCondition(); //number == 1private Condition c2 = lock.newCondition(); //number == 2private Condition c3 = lock.newCondition(); //number == 3/*** A线程每一轮要执行的操作*/public void wash() {lock.lock();try{//判断while(number != 1){c1.await();//阻塞}//模拟线程执行的任务System.out.println(Thread.currentThread().getName()+"-洗头");//通知number = 2;c2.signal();//唤醒了超超} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}/*** B线程每一轮要执行的操作*/public void cut() {lock.lock();try{//判断while(number != 2){c2.await();//阻塞}//模拟线程执行的任务System.out.println(Thread.currentThread().getName()+"-理发");//通知number = 3;c3.signal();//唤醒3} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}public void cook() {lock.lock();try{//判断while(number != 3){c3.await();}//模拟线程执行的任务System.out.println(Thread.currentThread().getName()+"-吹干");//通知number = 1;c1.signal();//唤醒雄雄} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}
}
http://www.yayakq.cn/news/509042/

相关文章:

  • 个人做淘宝客网站要备案腾云网站建设怎么样
  • 可以做公司宣传的网站有哪些内容有做直播网网站的公司没有
  • jsp源码做网站怎么看网站的建站公司是哪个
  • 网站建设业动态网站建设收费标准信息
  • 县城网站怎么做石家庄优化
  • 山东中讯做网站怎么样商标注册申请官网
  • 做网站可不可以模仿中国房产网
  • 手机网站 像素百度seo公司报价
  • 北京网站开发优选ls20227最新腾讯新闻
  • 户外家具技术支持东莞网站建设梅龙高速施工企业
  • 交做网站视频百度云影视网站开发工程师
  • 长沙制作网站公司哪家好国内知名网站制作公司
  • 济宁医院网站建设自适应网站建设优化建站
  • 一键注册所有网站网站建设捌金手指下拉二七
  • 做幼儿网站的目标如何给wordpress添加关键词描述
  • vue 直播网站开发上海品牌营销咨询公司
  • 哪家做网站cms是什么意思的缩写
  • 做网站接广告要交税吗wordpress背景
  • 企业网站建设不足网页设计案例收集
  • 招聘网站开发背景天猫商城入驻
  • 搭建什么平台上海何鹏seo
  • 用php做电子商务网站手工制作教程视频教程
  • 建设一个企业网站要多少钱分类目录采用的是什么编目
  • 保定网站优化排名贵州网站建设gzzctyi
  • rar在线解压缩网站360建筑网怎么删除简历
  • 单位网站建设的不足温州专业手机网站制作哪家好
  • 做地方的门户网站百度推广一年多少钱
  • 南京网站设计制作排名网站开发合同免费模板
  • 陕西省建设资格注册中心网站东莞营销网站建设报价
  • 不需要丢链接可以百度收录的网站茂名东莞网站建设