欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Lock鎖多線程中實(shí)現(xiàn)流水線任務(wù)

 更新時(shí)間:2020年05月01日 12:30:54   作者:DescribeMe  
這篇文章主要介紹了Java Lock鎖多線程中實(shí)現(xiàn)流水線任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

  下面程序代碼通過(guò)使用Lock鎖執(zhí)行簡(jiǎn)單的流水線任務(wù):

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author lzq
 * @data 2020/4/29 0029 - 下午 9:48
 */
public class TestLock {
  public static void main(String[] args) {
    DataSource dataSource=new DataSource();
    new Thread(() -> {
      for (int i=0;i<10;i++){
        dataSource.a();
      }
    },"A").start();

    new Thread(() -> {
      for (int i=0;i<10;i++){
        dataSource.b();
      }
    },"B").start();

    new Thread(() -> {
      for (int i=0;i<10;i++){
        dataSource.c();
      }
    },"C").start();
  }
}

class DataSource{
  private int x=1;
  private Lock lock=new ReentrantLock();
  private Condition condition1=lock.newCondition();
  private Condition condition2=lock.newCondition();
  private Condition condition3=lock.newCondition();

  public void a(){
    lock.lock();
    try {
      while(x!=1){
        condition1.await();
      }
      System.out.println(Thread.currentThread().getName()+":aaa");
      x=2;
      condition2.signal();
    } catch (InterruptedException e) {
      e.printStackTrace();
    } finally {
      lock.unlock();
    }
  }
  public void b(){
    lock.lock();
    try {
      while(x!=2){
        condition2.await();
      }
      System.out.println(Thread.currentThread().getName()+":bbb");
      x=3;
      condition3.signal();
    } catch (InterruptedException e) {
      e.printStackTrace();
    } finally {
      lock.unlock();
    }
  }
  public void c(){
    lock.lock();
    try {
      while(x!=3){
        condition3.await();
      }
      System.out.println(Thread.currentThread().getName()+":ccc");
      x=1;
      condition1.signal();
    } catch (InterruptedException e) {
      e.printStackTrace();
    } finally {
      lock.unlock();
    }
  }
}

    執(zhí)行結(jié)果如下:

對(duì)于上面代碼簡(jiǎn)單分析:代碼中包含簡(jiǎn)單的生產(chǎn)者消費(fèi)者流程和Lock實(shí)現(xiàn)三部曲,即重復(fù)判斷條件,執(zhí)行邏輯,喚醒其他線程和產(chǎn)生鎖,加鎖,解鎖。注意這里一點(diǎn),條件判斷一定要重復(fù)判斷,不然可能會(huì)導(dǎo)致線程假醒影響結(jié)果。

因?yàn)楫?dāng)線程處于等待狀態(tài)時(shí),線程會(huì)釋放資源,等到被喚醒的時(shí)候,從上次await的地方醒來(lái)繼續(xù)執(zhí)行,這時(shí)條件判斷成立,執(zhí)行await,其他線程再修改條件使得本線程被喚醒,此時(shí)本線程不會(huì)繼續(xù)判斷,而是繼續(xù)執(zhí)行,如果使用循環(huán)判斷就能檢驗(yàn)出條件被修改。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java的非對(duì)稱(chēng)加密(RSA、數(shù)字簽名、數(shù)字證書(shū))詳解

    Java的非對(duì)稱(chēng)加密(RSA、數(shù)字簽名、數(shù)字證書(shū))詳解

    這篇文章主要介紹了Java的非對(duì)稱(chēng)加密(RSA、數(shù)字簽名、數(shù)字證書(shū))詳解,非對(duì)稱(chēng)加密:加密、解密使用不同的兩把密鑰,這兩把密鑰成對(duì),一般通信開(kāi)始時(shí)通過(guò)非對(duì)稱(chēng)加密將對(duì)稱(chēng)加密的密鑰發(fā)送給另一方,然后雙方通過(guò)對(duì)稱(chēng)加密來(lái)進(jìn)行溝通,需要的朋友可以參考下
    2024-01-01
  • SpringBoot參數(shù)校驗(yàn)的方法總結(jié)

    SpringBoot參數(shù)校驗(yàn)的方法總結(jié)

    今天帶大家學(xué)習(xí)SpringBoot參數(shù)校驗(yàn)的方法,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • springboot2.X整合prometheus監(jiān)控的實(shí)例講解

    springboot2.X整合prometheus監(jiān)控的實(shí)例講解

    這篇文章主要介紹了springboot2.X整合prometheus監(jiān)控的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • java中fork-join的原理解析

    java中fork-join的原理解析

    Fork/Join框架是Java7提供用于并行執(zhí)行任務(wù)的框架,是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),今天通過(guò)本文給大家分享java中fork join原理,感興趣的朋友一起看看吧
    2021-04-04
  • Java應(yīng)用EasyExcel工具類(lèi)

    Java應(yīng)用EasyExcel工具類(lèi)

    這篇文章主要介紹了Java應(yīng)用EasyExcel工具類(lèi),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-05-05
  • Java中IO流解析及代碼實(shí)例

    Java中IO流解析及代碼實(shí)例

    下面小編就為大家?guī)?lái)一篇關(guān)于Java中的IO流總結(jié)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-07-07
  • Spring Boot集成MyBatis的方法

    Spring Boot集成MyBatis的方法

    今天小編就為大家分享一篇關(guān)于Spring Boot集成MyBatis的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Java定時(shí)任務(wù):利用java Timer類(lèi)實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的功能

    Java定時(shí)任務(wù):利用java Timer類(lèi)實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的功能

    本篇文章主要介紹了利用java Timer類(lèi)實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的功能,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • kotlin改善java代碼實(shí)例分析

    kotlin改善java代碼實(shí)例分析

    我們給大家整理了關(guān)于kotlin改善java代碼的相關(guān)實(shí)例以及操作的詳細(xì)方法,有需要的讀者們參考下。
    2018-03-03
  • Java中的布隆過(guò)濾器你真的懂了嗎

    Java中的布隆過(guò)濾器你真的懂了嗎

    經(jīng)常會(huì)聽(tīng)到大家說(shuō)起布隆過(guò)濾器,但是很多人都只是聽(tīng)過(guò)名字,卻并不知道其是怎么實(shí)現(xiàn)的。下面將詳細(xì)介紹一下布隆過(guò)濾器,并且使用簡(jiǎn)單的代碼演示
    2023-04-04

最新評(píng)論