美文网首页Java-多线程
用 Exchanger两个线程之间的通信

用 Exchanger两个线程之间的通信

作者: PageThinker | 来源:发表于2020-04-14 23:02 被阅读0次
    1.png

    01 Exchanger 作用

    使两个线程之间进行数据传递。(对是两个之间而不是三个或者更多个线程之间)

    02 常用方法

    exchange() 阻塞当前线程并等待其他线程来取得数据,若没有其他线程来取数据则一直等待。

    exchange() 传递数据

    exchange(V v, long timeout, TimeUnit unit) 在指定的时间内没收到消息,则抛出超时的异常。

    03 例子

    package com.page.concurrent.exchanger;
    
    import java.util.concurrent.Exchanger;
    
    public class Worker extends Thread {
    
        private final String name;
        Exchanger<String> exchanger;
    
        public Worker(String name, Exchanger<String> exchanger) {
            this.name = name;
            this.exchanger = exchanger;
        }
    
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + " : " +
                    System.currentTimeMillis() +
                    " " + name +
                    " waiting message.");
    
            try {
                String exchange = exchanger.exchange("I'm " + name);
                System.out.println(name + " get message : " + exchange);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
        }
    }
    
    
    package com.page.concurrent.exchanger;
    
    import java.util.concurrent.Exchanger;
    
    public class App {
        public static void main(String[] args) {
            Exchanger<String> exchanger = new Exchanger<>();
    
            for (int i = 1; i <= 2; i++) {
                new Worker("people-" + i, exchanger)
                        .start();
            }
        }
    }
    
    

    相关文章

      网友评论

        本文标题:用 Exchanger两个线程之间的通信

        本文链接:https://www.haomeiwen.com/subject/vmdfvhtx.html