java 多线程之间进行数据交换

Posted 咩咩文

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 多线程之间进行数据交换相关的知识,希望对你有一定的参考价值。

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * 多线程之间交换数据使用Exchanger方法来传递想要传递的数据,并且返回时接受其他线程传递的数
 * @author Bowin
 *
 */
public class ExchangeTest   
    public static void main(String[] args)   
        ExecutorService service =Executors.newCachedThreadPool();  
        final Exchanger<Object> exchanger = new Exchanger<>();  
        service.execute(new Runnable()   
            @Override  
            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);//等待其他线程执行exchange方法,并获取其他线程的执行结果
                    System.out.println("线程 "+Thread.currentThread().getName()+  
                            "换回的数据为 "+data2);  
                catch(Exception e)  
                    e.printStackTrace();  
                  
                  
              
        );  
          
        service.execute(new Runnable()   
              
            @Override  
            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)  
                    e.printStackTrace();  
                  
                  
                  
              
        );  
      
  

以上是关于java 多线程之间进行数据交换的主要内容,如果未能解决你的问题,请参考以下文章

java 多线程 29 :多线程组件之 Exchanger

Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]

Java内存模型

Java内存模型

Java内存模型

Java 多线程与并发:内存模型