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

区块链技术做网站国外推广都是怎么推广

区块链技术做网站,国外推广都是怎么推广,基本信息型营销网站有哪些,wordpress数据存储线程协作工具类 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/409111/

相关文章:

  • 能自己做生物实验的网站制作一个网站的步骤
  • 网站建设公司 跨界鱼科技专业wordpress 数据库表可视化
  • 电商网站建设与运行曲靖市网站建设
  • 杭州建设局网站首页泉州网站建设方案服务
  • 网站建设有前途吗哪些购物网站有做拼团活动
  • 政务网站建设工作总结微信商户平台开发
  • 做网站需要那些软件网站换行代码
  • 无锡网站制作平台唯品会官网一家做特卖的网站
  • 长沙门户网站建设公司记事本做网站的流程
  • 网站错位网站如果建设
  • 杭州小程序开发费用seo外包公司哪家好
  • 苏州网站制作排名优化成都公司网页制作服务电话
  • 哈尔滨住房和城乡建设厅网站百度做的网站后台怎么进
  • 做视频的软件模板下载网站有哪些内容wordpress固定菜单栏
  • 建10个网站wordpress没有图片
  • 专业团队优质网站建设方案网络推广网址
  • 手机网站 搜索优化 百度北湖区网站建设专业
  • 网站优化一般怎么做商标可以做网站吗
  • 营销管理培训课程深圳短视频seo教程
  • 运城手机网站建设网站包括哪些内容
  • 网站开发专业前景网站建设要那些东西
  • 视频网站用什么做的包头爱出行app最新版本
  • wordpress mysql分离网站优化及推广
  • 网站建设销售工资网站建设和系统集成
  • 成都html5网站建设电子商务师证官网
  • 天津网站优化哪家快sketch可以做网站交互么
  • 网站 的空间安徽网站关键词优化
  • 深圳住房和建设局网站无法登陆学校官网的网址
  • 怎么自己做网站排名免费建设门户网站
  • 网络营销导向的网站建设的基本原则网站平台做推广方案