java線程中Exchanger使用

jopen 10年前發布 | 21K 次閱讀 線程 Java開發

有時我們需要對元素進行配對和交換線程的同步點,使用exchange方法 返回其伙伴的對象,這時我們就需要使用線程類中的Exchanger類了,

我通過一個實例 來簡單說明一下他的使用方法及其作用:

    import java.util.concurrent.Exchanger;  
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  


    public class TestExchanger {  

        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
             ExecutorService executor = Executors.newCachedThreadPool();  
             final Exchanger<String> exchanger = new Exchanger<String>();  
             executor.execute(new Runnable() {  
                String data1 = "abc";  
                @Override  
                public void run() {  
                    try {  
                        System.out.println(Thread.currentThread().getName() +"正在把數據 "+ data1+ " 交換出去" );  
                        Thread.sleep((long) (Math.random()*1000));  

                        String data2 = (String) exchanger.exchange(data1);  
                        System.out.println(Thread.currentThread().getName() + "交換數據 到  "+ data2);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            });  

             executor.execute(new Runnable() {  
                 String data1 = "def";  
                @Override  
                public void run() {  
                    try {  
                        System.out.println(Thread.currentThread().getName() +"正在把數據 "+ data1+ " 交換出去" );  
                        Thread.sleep((long) (Math.random()*1000));  

                        String data2 = (String) exchanger.exchange(data1);  
                        System.out.println(Thread.currentThread().getName() + "交換數據 到  "+ data2);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            });  
        }  

    }  

執行完畢之后;你會發現數據完成交換

pool-1-thread-1正在把數據 abc 交換出去
pool-1-thread-2正在把數據 def 交換出去
pool-1-thread-2交換數據 到  abc
pool-1-thread-1交換數據 到  def

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!