zoukankan      html  css  js  c++  java
  • JAVA 并发编程-线程同步工具类(十二)


    本文主要介绍一些java线程同步工具类,并不进行详细解说。当有须要时。能够再去结合实例学习。

     

    信号灯(Semaphore)

     

    应用场景举例:

     

    比如公司的打卡系统。假设有一个打卡机,那么一次就仅仅能有一个人打卡,其余的人就被堵塞住。打卡完以后就可由下一个人打卡。假设有3个打卡机。那么一次就同意3个人或者少于三个人打卡,其余的人就得等待打卡机空暇下来才干继续打卡。

     

    结果:

     

    已进入1个线程,还可进入2个

    已进入2个线程,还可进入1个

    已进入3个线程。还可进入0个

    空余出1个

    已进入4个线程。还可进入0个

    已进入6个线程。还可进入0个

    空余出0个

    空余出1个

    已进入5个线程,还可进入0个

    空余出0个

    已进入8个线程,还可进入0个

    空余出1个

    已进入7个线程。还可进入0个

    已进入9个线程,还可进入0个

    空余出0个

    空余出1个

    空余出3个

    空余出3个

    从打印结果能够看出,尽管一次可进入三个线程。但并非要等三个线程所有空出来才干够进入其它线程。

    而是仅仅要有一个空暇,等待的线程立马补上。这和现实生活中的情景式多么类似阿。

    由此可见,信号灯用来控制线程是非常人性化的。

     

     

    障碍器(CyclicBarrier)

     

    应用场景举例:

     

    举个样例比方说公司接到一个项目(主线程),一部分人开发前台(线程1)。一部分人开发后台(线程2),前台和后台不可能同一时候开发完毕,可是仅仅有前台和后台都开发完毕了,才干提交给客户。那么,CyclicBarrier所实现的就是对已完毕任务的线程进行堵塞的功能。

     

    结果:

    前台正在开发!

    后台正在开发。

    前台开发完毕

    后台开发完毕

    两个项目组都已开发完毕,进行測试。

    測试通过,交付给客户

     

    synchroized、Lock、Semaphroe都是对线程执行開始进行控制,而CyclicBarrier是对线程的完毕进行控制

     

    同步计数器(countDownLatch)

     

    应用场景举例:

     

    作用是在完毕一组正在其它线程中执行的操作之前。它同意一个或多个线程一直等待。

    结果:

    准备開始!

    运动员7号到达终点!

    运动员9号到达终点!

    运动员6号到达终点!

    运动员1号到达终点!

    运动员3号到达终点!

    运动员4号到达终点!

    运动员0号到达终点!

    运动员8号到达终点!

    运动员2号到达终点!

    运动员5号到达终点!

    结束!

     

    对照障碍器(CyclicBarrier)来说,障碍器仅仅能控制线程的结束。

    可是计数器(CountDownLatch)能够通过多个计数器组合运用。既能够控制线程的開始,又能够控制线程的结束。

     

     

    线程间数据交换(Exchanger)

     

    应用场景举例:

     

    所实现的功能是线程间的数据交换。可是须要注意的是,仅仅能是两个线程的数据交换。

     

    结果:

     

    许阳拥有五元钱

    商店拥有beverage

    開始交易......

    商店得到:五元钱

    许阳得到beverage

     

    总结:

     

        以上都是一些线程的同步工具类。它们各有各的应用场景,在并发编程中。我们能够应用这些工具来更好的实现我们的业务需求。

     

     


  • 相关阅读:
    老杆子遇到新问题
    Linux 下网路适配器配置
    OpenCV学习笔记2_ShowAvi_获取Avi视频图像、摄像头图像
    OpenCV学习笔记3_ShowAvi_Trackbar_加载视频,并添加拖动条
    PS照片
    OpenCV学习笔记7_ImageToBGR_彩色图像三通道转化成BGR3幅单通道图像
    #include "stdafx.h"_预编译头文件
    OpenCV学习笔记1_ShowImage_显示一幅图像
    Visual Assist X_VS2010编程插件安装
    OpenCV学习笔记4_ImageToAvi_写视频
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6772692.html
Copyright © 2011-2022 走看看