最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Exchanger并發(fā)類使用方法

 更新時間:2020年04月24日 09:55:27   作者:flydean程序那些事  
這篇文章主要介紹了Java Exchanger并發(fā)類使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

簡介

Exchanger是java 5引入的并發(fā)類,Exchanger顧名思義就是用來做交換的。這里主要是兩個線程之間交換持有的對象。當Exchanger在一個線程中調(diào)用exchange方法之后,會等待另外的線程調(diào)用同樣的exchange方法。

兩個線程都調(diào)用exchange方法之后,傳入的參數(shù)就會交換。

類定義

public class Exchanger<V>

其中V表示需要交換的對象類型。

類繼承

java.lang.Object
↳ java.util.concurrent.Exchanger<V>

Exchanger直接繼承自O(shè)bject。

構(gòu)造函數(shù)

Exchanger()

Exchanger提供一個無參構(gòu)造函數(shù)。

兩個主要方法

public V exchange(V x) throws InterruptedException

當這個方法被調(diào)用的時候,當前線程將會等待直到其他的線程調(diào)用同樣的方法。當其他的線程調(diào)用exchange之后,當前線程將會繼續(xù)執(zhí)行。

在等待過程中,如果有其他的線程interrupt當前線程,則會拋出InterruptedException。

public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException

和第一個方法類似,區(qū)別是多了一個timeout時間。如果在timeout時間之內(nèi)沒有其他線程調(diào)用exchange方法,則會拋出TimeoutException。

具體的例子

我們先定義一個帶交換的類:

@Data
public class CustBook {
  private String name;
}

然后定義兩個Runnable,在run方法中調(diào)用exchange方法:

@Slf4j
public class ExchangerOne implements Runnable{

  Exchanger<CustBook> ex;

  ExchangerOne(Exchanger<CustBook> ex){
   this.ex=ex;
  }

  @Override
  public void run() {
  CustBook custBook= new CustBook();
    custBook.setName("book one");

    try {
      CustBook exhangeCustBook=ex.exchange(custBook);
      log.info(exhangeCustBook.getName());
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}
@Slf4j
public class ExchangerTwo implements Runnable{

  Exchanger<CustBook> ex;

  ExchangerTwo(Exchanger<CustBook> ex){
   this.ex=ex;
  }

  @Override
  public void run() {
  CustBook custBook= new CustBook();
    custBook.setName("book two");

    try {
      CustBook exhangeCustBook=ex.exchange(custBook);
      log.info(exhangeCustBook.getName());
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

最后在主方法中調(diào)用:

public class ExchangerUsage {

  public static void main(String[] args) {
    Exchanger<CustBook> exchanger = new Exchanger<>();
    // Starting two threads
    new Thread(new ExchangerOne(exchanger)).start();
    new Thread(new ExchangerTwo(exchanger)).start();
  }
}

我們看下結(jié)果:

22:14:09.069 [Thread-1] INFO com.flydean.ExchangerTwo - book one
22:14:09.073 [Thread-0] INFO com.flydean.ExchangerOne - book two

可以看到對象已經(jīng)被交換了。

結(jié)語

Exchanger在兩個線程需要交換對象的時候非常好用。大家可以在實際工作生活中使用。

本文的例子https://github.com/ddean2009/learn-java-concurrency/tree/master/Exchanger

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

相關(guān)文章

  • 淺談SpringBoot實現(xiàn)自動裝配的方法原理

    淺談SpringBoot實現(xiàn)自動裝配的方法原理

    SpringBoot的自動裝配是它的一大特點,可以大大提高開發(fā)效率,減少重復(fù)性代碼的編寫。本文將詳細講解SpringBoot如何實現(xiàn)自動裝配,需要的朋友可以參考下
    2023-05-05
  • Java通過動態(tài)代理實現(xiàn)一個簡單的攔截器操作

    Java通過動態(tài)代理實現(xiàn)一個簡單的攔截器操作

    這篇文章主要介紹了Java通過動態(tài)代理實現(xiàn)一個簡單的攔截器操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java多線程(單例模式,堵塞隊列,定時器)詳解

    Java多線程(單例模式,堵塞隊列,定時器)詳解

    這篇文章主要介紹了java多線程的(單例模式,堵塞隊列,定時器),具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-08-08
  • SpringBoot 如何使用RestTemplate發(fā)送Post請求

    SpringBoot 如何使用RestTemplate發(fā)送Post請求

    這篇文章主要介紹了SpringBoot 如何使用RestTemplate發(fā)送Post請求的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java設(shè)置Access-Control-Allow-Origin允許多域名訪問的實現(xiàn)方法

    Java設(shè)置Access-Control-Allow-Origin允許多域名訪問的實現(xiàn)方法

    這篇文章主要介紹了Java設(shè)置Access-Control-Allow-Origin允許多域名訪問的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • ElasticSearch?深度分頁示例解析

    ElasticSearch?深度分頁示例解析

    這篇文章主要為大家介紹了ElasticSearch?深度分頁示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java?中的?clone(?)?和?new哪個效率更高

    Java?中的?clone(?)?和?new哪個效率更高

    很多朋友不太清楚clone()和new那個更快?針對這個問題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個效率更高的問題,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • java object 之clone方法全面解析

    java object 之clone方法全面解析

    下面小編就為大家?guī)硪黄猨ava object 之clone方法全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java的Cglib動態(tài)代理實現(xiàn)方式詳解

    Java的Cglib動態(tài)代理實現(xiàn)方式詳解

    這篇文章主要介紹了Java的Cglib動態(tài)代理實現(xiàn)方式詳解,CGLIB是強大的、高性能的代碼生成庫,被廣泛應(yīng)用于AOP框架,它底層使用ASM來操作字節(jié)碼生成新的類,為對象引入間接級別,以控制對象的訪問,需要的朋友可以參考下
    2023-11-11
  • ArrayList詳解和使用示例_動力節(jié)點Java學(xué)院整理

    ArrayList詳解和使用示例_動力節(jié)點Java學(xué)院整理

    ArrayList 是一個數(shù)組隊列,相當于 動態(tài)數(shù)組。與Java中的數(shù)組相比,它的容量能動態(tài)增長。接下來通過本文給大家介紹arraylist詳解和使用示例代碼,需要的的朋友一起學(xué)習(xí)吧
    2017-05-05

最新評論

兖州市| 莫力| 清远市| 兖州市| 黄冈市| 贞丰县| 梓潼县| 屏东县| 汾阳市| 江华| 怀安县| 区。| 崇义县| 东源县| 汝南县| 滦南县| 张北县| 桂东县| 潜山县| 辽源市| 福泉市| 鹤岗市| 马关县| 米脂县| 江川县| 蒙自县| 逊克县| 祁东县| 台北市| 郎溪县| 刚察县| 鸡西市| 凌云县| 丹凤县| 唐山市| 内黄县| 曲松县| 沧源| 黎川县| 邵东县| 福鼎市|