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

Java多線程中的Exchanger應(yīng)用簡(jiǎn)析

 更新時(shí)間:2023年12月01日 09:41:20   作者:securitit  
這篇文章主要介紹了Java多線程中的Exchanger應(yīng)用簡(jiǎn)析,Exchanger提供了一個(gè)同步點(diǎn)exchange方法,兩個(gè)線程調(diào)用exchange方法時(shí),無(wú)論調(diào)用時(shí)間先后,兩個(gè)線程會(huì)互相等到線程到達(dá)exchange方法調(diào)用點(diǎn),此時(shí)兩個(gè)線程可以交換數(shù)據(jù),將本線程產(chǎn)出數(shù)據(jù)傳遞給對(duì)方,需要的朋友可以參考下

Exchanger簡(jiǎn)析

Exchanger用于線程間進(jìn)行通信、數(shù)據(jù)交換。

Exchanger提供了一個(gè)同步點(diǎn)exchange方法,兩個(gè)線程調(diào)用exchange方法時(shí),無(wú)論調(diào)用時(shí)間先后,兩個(gè)線程會(huì)互相等到線程到達(dá)exchange方法調(diào)用點(diǎn),此時(shí)兩個(gè)線程可以交換數(shù)據(jù),將本線程產(chǎn)出數(shù)據(jù)傳遞給對(duì)方。

演示示例1

package com.securitit.serialize.juc;
import java.util.concurrent.Exchanger;
public class ExchangerTester {
	// Exchanger實(shí)例.
	private static final Exchanger<String> exchanger = new Exchanger<String>();
	public static void main(String[] args) {
		// 模擬阻塞線程.
		new Thread(() -> {
			try {
				String wares = "紅燒肉";
				System.out.println(Thread.currentThread().getName() + "商品方正在等待金錢方,使用貨物兌換為金錢.");
				Thread.sleep(2000);
				String money = exchanger.exchange(wares);
				System.out.println(Thread.currentThread().getName() + "商品方使用商品兌換了" + money);
			} catch (InterruptedException ex) {
				ex.printStackTrace();
			}
		}).start();
		// 模擬阻塞線程.
		new Thread(() -> {
			try {
				String money = "人民幣";
				System.out.println(Thread.currentThread().getName() + "金錢方正在等待商品方,使用金錢購(gòu)買食物.");
				Thread.sleep(4000);
				String wares = exchanger.exchange(money);
				System.out.println(Thread.currentThread().getName() + "金錢方使用金錢購(gòu)買了" + wares);
			} catch (InterruptedException ex) {
				ex.printStackTrace();
			}
		}).start();
	}
}

輸出結(jié)果:

Thread-0商品方正在等待金錢方,使用貨物兌換為金錢.
Thread-1金錢方正在等待商品方,使用金錢購(gòu)買食物.
Thread-0商品方使用商品兌換了人民幣
Thread-1金錢方使用金錢購(gòu)買了紅燒肉

從結(jié)果可以看出,線程Thread-0首先調(diào)用了exchange方法,等待線程Thread-1到達(dá)exchange方法。

當(dāng)線程Thread-0和Thread-1兩者都到達(dá)exchange方法時(shí),通過exchange進(jìn)行了數(shù)據(jù)交換。從結(jié)果可以看出,兩個(gè)都拿到了對(duì)方傳遞的數(shù)據(jù)。

演示示例2

接下來(lái)演示public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException;

package com.securitit.serialize.juc;
import java.util.concurrent.Exchanger;
import java.util.concurrent.TimeUnit;
public class ExchangerTimeTester {
	// Exchanger實(shí)例.
	private static final Exchanger<String> exchanger = new Exchanger<String>();
	public static void main(String[] args) {
		// 模擬阻塞線程.
		new Thread(() -> {
			try {
				String wares = "紅燒肉";
				System.out.println(Thread.currentThread().getName() + "商品方正在等待金錢方,使用貨物兌換為金錢.");
				Thread.sleep(2000);
				String money = exchanger.exchange(wares, 1000, TimeUnit.MILLISECONDS);
				System.out.println(Thread.currentThread().getName() + "商品方使用商品兌換了" + money);
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}).start();
		// 模擬阻塞線程.
		new Thread(() -> {
			try {
				String money = "人民幣";
				System.out.println(Thread.currentThread().getName() + "金錢方正在等待商品方,使用金錢購(gòu)買食物.");
				Thread.sleep(4000);
				String wares = exchanger.exchange(money);
				System.out.println(Thread.currentThread().getName() + "金錢方使用金錢購(gòu)買了" + wares);
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}).start();
	}
}

輸出結(jié)果:

Thread-0商品方正在等待金錢方,使用貨物兌換為金錢.
Thread-1金錢方正在等待商品方,使用金錢購(gòu)買食物.
java.util.concurrent.TimeoutException
    at java.util.concurrent.Exchanger.exchange(Exchanger.java:626)
    at com.securitit.serialize.juc.ExchangerTimeTester.lambda$0(ExchangerTimeTester.java:18)
    at java.lang.Thread.run(Thread.java:748)

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

API中,若阻塞線程等待超過指定時(shí)間,則會(huì)拋出異常。

到此這篇關(guān)于Java多線程中的Exchanger應(yīng)用簡(jiǎn)析的文章就介紹到這了,更多相關(guān)Exchanger簡(jiǎn)析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

奉新县| 冀州市| 铜梁县| 安阳县| 天台县| 武强县| 互助| 津市市| 镇赉县| 水富县| 阜阳市| 六枝特区| 玉林市| 自贡市| 府谷县| 上饶市| 三明市| 仁寿县| 哈密市| 通化市| 怀远县| 靖西县| 清水河县| 五大连池市| 红河县| 呼图壁县| 桦川县| 贵溪市| 建瓯市| 翁牛特旗| 清苑县| 察雅县| 松潘县| 紫金县| 故城县| 灵武市| 宣汉县| 即墨市| 马鞍山市| 阳曲县| 府谷县|