java并发之Exchanger_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java并发之Exchanger

java并发之Exchanger

 2013/9/4 18:14:38  ddlgyq  程序员俱乐部  我要评论(0)
  • 摘要:两个线程可以交换对象的同步点。每个线程都在进入exchange方法时给出某个对象,并接受其他线程返回时给出的对象。用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。构造方法摘要Exchanger()创建一个新的Exchanger。方法摘要Vexchange(Vx)等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。Vexchange(Vx
  • 标签:Java Exchange Java并发
两个线程可以交换对象的同步点。每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象。
  用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
构造方法摘要
Exchanger()
          创建一个新的 Exchanger。 
方法摘要
V exchange(V x)
          等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
V exchange(V x, long timeout, TimeUnit unit)
          等待另一个线程到达此交换点(除非它被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。 
class="java">
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 {                
                     Thread.sleep((long)(Math.random()*10000));
                     String data1 = "zxx";
                     System.out.println("线程" + Thread.currentThread().getName() + 
                     "正在把数据" + data1 +"换出去");
                     String data2 = (String)exchanger.exchange(data1);
                     System.out.println("线程" + Thread.currentThread().getName() + 
                     "换回的数据为" + data2);
                 }catch(Exception e){
                     
                 }
             }    
         });
         service.execute(new Runnable(){
             public void run() {
                 try {                
                     Thread.sleep((long)(Math.random()*10000));
                     String data1 = "lhm";
                     System.out.println("线程" + Thread.currentThread().getName() + 
                     "正在把数据" + data1 +"换出去");
                     String data2 = (String)exchanger.exchange(data1);
                     System.out.println("线程" + Thread.currentThread().getName() + 
                     "换回的数据为" + data2);
                 }catch(Exception e){
                     
                 }                
             }    
         });        
     }
}

运行结果如下:
线程pool-1-thread-1正在把数据zxx换出去
线程pool-1-thread-2正在把数据lhm换出去
线程pool-1-thread-1换回的数据为lhm
线程pool-1-thread-2换回的数据为zxx
发表评论
用户名: 匿名