Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例
更新時(shí)間:2015年05月19日 10:07:35 投稿:junjie
這篇文章主要介紹了Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下
用于實(shí)現(xiàn)兩個(gè)人之間的數(shù)據(jù)交換,每個(gè)人在完成一定的事務(wù)后想與對(duì)方交換數(shù)據(jù),第一個(gè)先拿出數(shù)據(jù)的人將一直等待第二個(gè)人拿著數(shù)據(jù)到來(lái)時(shí),才能彼此交換數(shù)據(jù)。
復(fù)制代碼 代碼如下:
package com.ljq.test.thread;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExchangerTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final Exchanger exchanger = new Exchanger();
service.execute(new Runnable(){
public void run() {
try {
String data1 = "張三";
System.out.println("線程" + Thread.currentThread().getName() + "正在把數(shù)據(jù)'" + data1 +"'換出去");
Thread.sleep((long)(Math.random()*10000));
String data2 = (String)exchanger.exchange(data1);
System.out.println("線程" + Thread.currentThread().getName() + "換回的數(shù)據(jù)為'" + data2+"'");
}catch(Exception e){
}
}
});
service.execute(new Runnable(){
public void run() {
try {
String data1 = "李四";
System.out.println("線程" + Thread.currentThread().getName() + "正在把數(shù)據(jù)'" + data1 +"'換出去");
Thread.sleep((long)(Math.random()*10000));
String data2 = (String)exchanger.exchange(data1);
System.out.println("線程" + Thread.currentThread().getName() + "換回的數(shù)據(jù)為'" + data2 + "'");
}catch(Exception e){
}
}
});
}
}
返回結(jié)果:
復(fù)制代碼 代碼如下:
線程pool-1-thread-1正在把數(shù)據(jù)'張三'換出去
線程pool-1-thread-2正在把數(shù)據(jù)'李四'換出去
線程pool-1-thread-1換回的數(shù)據(jù)為'李四'
線程pool-1-thread-2換回的數(shù)據(jù)為'張三'
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Java中的MapStruct知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了Java中的MapStruct知識(shí)點(diǎn)總結(jié),MapStruct是一個(gè)Java注解處理器,用于生成類型安全的映射代碼,它可以自動(dòng)處理源對(duì)象和目標(biāo)對(duì)象之間的映射,減少了手動(dòng)編寫(xiě)重復(fù)的映射代碼的工作量,需要的朋友可以參考下2023-10-10Java中字符串常見(jiàn)的一些拼接方式總結(jié)
字符串拼接是我們?cè)贘ava代碼中比較經(jīng)常要做的事情,就是把多個(gè)字符串拼接到一起,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java中字符串常見(jiàn)的一些拼接方式,需要的朋友可以參考下2023-04-04Java8如何利用Lambda快速生成map、多層嵌套map
這篇文章主要介紹了Java8如何利用Lambda快速生成map、多層嵌套map問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09