concurrent包下的Exchanger练习
生活随笔
收集整理的這篇文章主要介紹了
concurrent包下的Exchanger练习
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Exchanger可以在兩個(gè)線程之間交換數(shù)據(jù),只能是2個(gè)線程,他不支持更多的線程之間互換數(shù)據(jù)。
當(dāng)線程A調(diào)用Exchange對(duì)象的exchange()方法后,他會(huì)陷入阻塞狀態(tài),直到線程B也調(diào)用了exchange()方法,然后以線程安全的方式交換數(shù)據(jù),之后線程A和B繼續(xù)運(yùn)行。
1 package cn.sp.test4; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.concurrent.Exchanger; 6 7 /** 8 * Created by 2YSP on 2017/9/1. 9 * 兩個(gè)線程之間交換數(shù)據(jù) 10 */ 11 public class ExchangerTest { 12 13 14 public static void main(String[] args) { 15 final Exchanger<List<Integer>> exchanger = new Exchanger<>(); 16 17 new Thread(() -> { 18 List<Integer> l = new ArrayList<Integer>(2); 19 l.add(1); 20 l.add(2); 21 try { 22 l = exchanger.exchange(l); 23 } catch (InterruptedException e) { 24 e.printStackTrace(); 25 } 26 System.out.println("thread1: " + l); 27 }).start(); 28 29 new Thread(() -> { 30 List<Integer> l = new ArrayList<Integer>(2); 31 l.add(3); 32 l.add(4); 33 try { 34 l = exchanger.exchange(l); 35 } catch (InterruptedException e) { 36 e.printStackTrace(); 37 } 38 System.out.println("thread2: " + l); 39 }).start(); 40 41 } 42 }執(zhí)行結(jié)果:
可以看到線程1和2已經(jīng)交換了數(shù)據(jù)。
轉(zhuǎn)載于:https://www.cnblogs.com/2YSP/p/7483584.html
總結(jié)
以上是生活随笔為你收集整理的concurrent包下的Exchanger练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《Python面向对象编程指南》——2.
- 下一篇: JavaScript中的argument