zoukankan      html  css  js  c++  java
  • JAVA Exchanger

    //Exchanger工具类的使用案例 
    //本文给出一个简单的例子,实现两个线程之间交换数据,用Exchanger来做非常简单。
    
     
    
    import java.util.concurrent.Exchanger;
    import java.util.concurrent.atomic.AtomicReference;
    
    public class ThreadA implements Runnable {
    
      private final Exchanger<Integer> exchanger;
    
      private final AtomicReference<Integer> last = new AtomicReference<Integer>(
          5);
    
      public ThreadA(Exchanger<Integer> exchanger) {
        this.exchanger = exchanger;
      }
    
      public void run() {
        try {
          while (true) {
            last.set(exchanger.exchange(last.get()));
            System.out.println(" After calling exchange. Thread A has value: " + last.get());
            Thread.sleep(2000);
          }
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    
    }
    
    package my.concurrent.exchanger;
    
    import java.util.concurrent.Exchanger;
    import java.util.concurrent.atomic.AtomicReference;
    
    public class ThreadB implements Runnable {
    
      private Exchanger<Integer> exchanger;
    
      private final AtomicReference<Integer> last = new AtomicReference<Integer>(
          10);
    
      public ThreadB(Exchanger<Integer> exchanger) {
        this.exchanger = exchanger;
      }
    
      public void run() {
        try {
          while (true) {
            last.set(exchanger.exchange(last.get()));
            System.out.println(" After calling exchange. Thread B has value: " + last.get());
            Thread.sleep(2000);
          }
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    
    }
    
    package my.concurrent.exchanger;
    
    import java.util.concurrent.Exchanger;
    
    public class ExchangerTest {
    
      public static void main(String[] args) {
        Exchanger<Integer> exchanger = new Exchanger<Integer>();
        new Thread(new ThreadA(exchanger)).start();
        new Thread(new ThreadB(exchanger)).start();
      }
    
    }
  • 相关阅读:
    公输盘
    电脑机器刷BIOS
    八皇后问题的实现
    安装msdn出现的问题及解决
    加密推荐书籍
    C++待解
    atan()与atan2()
    Win32/MFC/COM学习推荐书籍
    C++问题
    windows2000 sp4下载
  • 原文地址:https://www.cnblogs.com/rojas/p/5367406.html
Copyright © 2011-2022 走看看