java 线程间交换数据的Exchanger
2017-07-31 18:34
429 查看
字符串
对象
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Exchanger;
public class ExchangerDemo {
public static void main(String[] args) {
final Exchanger<List<Integer>> exchanger = new Exchanger<List<Integer>>();
new Thread(){
public void run(){
List<Integer> list = new ArrayList<Integer>(2);
list.add(1);
list.add(2);
try {
list = exchanger.exchange(list);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread1:" + list);
}
}.start();
new Thread(){
public void run(){
List<Integer> list = new ArrayList<Integer>(3);
list.add(3);
list.add(4);
list.add(5);
try {
list = exchanger.exchange(list);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread2:" + list);
}
}.start();
}
}
import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExchangerTest { private static final Exchanger<String> exgr = new Exchanger<String>(); private static ExecutorService threadPool = Executors.newFixedThreadPool(2); public static void main(String[] args) { threadPool.execute(new Runnable() { @Override public void run() { try { String A = "银行流水A";// A录入银行流水数据 String o=exgr.exchange(A); System.out.println(o); } catch (InterruptedException e) { } } }); threadPool.execute(new Runnable() { @Override public void run() { try { String B = "银行流水B";// B录入银行流水数据 String A = exgr.exchange(B); System.out.println("A和B数据是否一致:" + A.equals(B) + ",A录入的是:" + A + ",B录入是:" + B); } catch (InterruptedException e) { } } }); threadPool.shutdown(); } }
对象
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Exchanger;
public class ExchangerDemo {
public static void main(String[] args) {
final Exchanger<List<Integer>> exchanger = new Exchanger<List<Integer>>();
new Thread(){
public void run(){
List<Integer> list = new ArrayList<Integer>(2);
list.add(1);
list.add(2);
try {
list = exchanger.exchange(list);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread1:" + list);
}
}.start();
new Thread(){
public void run(){
List<Integer> list = new ArrayList<Integer>(3);
list.add(3);
list.add(4);
list.add(5);
try {
list = exchanger.exchange(list);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread2:" + list);
}
}.start();
}
}
相关文章推荐
- Java并发工具类(四):线程间交换数据的Exchanger
- java多线程-Thread两个线程交换数据Exchanger
- java学习——使用Exchanger实现两个线程间的数据交换
- Java多线程与并发库高级应用之线程数据交换Exchanger
- Java并发工具类之线程间数据交换工具Exchanger
- Java Exchanger(两线程交换数据)
- Java多线程/并发25、Exchanger线程数据交换
- Exchanger——Java两个线程间交换数据的工具类
- 13____java线程同步工具类之线程数据交换(Exchanger)
- JAVA中的并发工具类(四)---线程间交换数据的Exchanger类
- Exchanger两个线程之间交换数据
- Java多线程编程之使用Exchanger数据交换实例
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
- Exchanger: 两个线程 间 交换 数据
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
- Java 线程数据交换控制器Exchange使用实例
- java中的线程协调与线程间的数据交换
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- Java线程(十二):Exchanger-兄弟线程的信息交换
- 黑马程序员-Condition条件对象、Semaphore、CyclicBarrier、倒计时门栓 CountDownLatch、Exchanger(实现两个线程之间数据交换