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();
      }
    
    }
  • 相关阅读:
    Java低配版简单的随机点名系统
    是否二叉搜索树
    输出学生成绩
    求给定精度的简单交错序列部分和
    字符串的连接
    学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均
    测试文档(final)
    详细设计文档(final)
    概要设计文档(final)
    需求规格说明书(final)
  • 原文地址:https://www.cnblogs.com/rojas/p/5367406.html
Copyright © 2011-2022 走看看