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();
      }
    
    }
  • 相关阅读:
    电脑内存九大常见问题解决方案
    学会快速装系统 图解硬盘分区软件Norton Ghost使用
    XP和Win 7双系统安装说明和注意事项
    Linux gzip、gunzip
    kylin的状态栏(启动器)改成ubuntu之前的样子
    chrome安装HTTP测试扩展
    程序员重要的事情
    PD003-NET通用后台系统
    通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
    UNICODE与ANSI的区别
  • 原文地址:https://www.cnblogs.com/rojas/p/5367406.html
Copyright © 2011-2022 走看看