JAvaマルチスレッド間でのデータ交換

2071 ワード

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 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();  
                }  
                  
                  
            }  
        });  
    }  
}