zoukankan      html  css  js  c++  java
  • 练习题之ExChange

       两个线程可以交换对象的同步点。每个线程都在进入exChange方法时给出某个对象,并接受其他线程返回时给出的对象。用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。

    构造方法摘要
    Exchanger()           创建一个新的 Exchanger。
    方法摘要
    V exchange(V x)           等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
    V exchange(V x, long timeout, TimeUnit unit)           等待另一个线程到达此交换点(除非它被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
    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
  • 相关阅读:
    第五次实验报告
    第四次实验报告
    [_UICascadingTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds
    真机测试时出现 could not find developer disk image问题
    UItableview正在滚动的时候进行操作容易出问题
    NSArray NSMutableArray 初始化
    日志报错Can't add self as subview
    设置statusBar状态栏颜色
    网站视频url地址获取
    ios9 xcode7以后编译需要进行的几项设置
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5536280.html
Copyright © 2011-2022 走看看