欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java多线程编程之使用Exchanger数据交换实例

程序员文章站 2024-03-03 15:13:34
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。 复制代码 代码如下:...

用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。

复制代码 代码如下:

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() + "正在把数据'" + data1 +"'换出去");
                    thread.sleep((long)(math.random()*10000));
                    string data2 = (string)exchanger.exchange(data1);
                    system.out.println("线程" + thread.currentthread().getname() + "换回的数据为'" + data2+"'");
                }catch(exception e){
                    
                }
            } 
        });
        service.execute(new runnable(){
            public void run() {
                try {             
                    string data1 = "李四";
                    system.out.println("线程" + thread.currentthread().getname() + "正在把数据'" + data1 +"'换出去");
                    thread.sleep((long)(math.random()*10000));                
                    string data2 = (string)exchanger.exchange(data1);
                    system.out.println("线程" + thread.currentthread().getname() + "换回的数据为'" + data2 + "'");
                }catch(exception e){
                    
                }             
            } 
        });   
    }
}

返回结果:

复制代码 代码如下:

线程pool-1-thread-1正在把数据'张三'换出去
线程pool-1-thread-2正在把数据'李四'换出去
线程pool-1-thread-1换回的数据为'李四'
线程pool-1-thread-2换回的数据为'张三'