zoukankan      html  css  js  c++  java
  • Java并发编程核心方法与框架-exchanger的使用

    Exchanger可以使两个线程之间传输数据,比生产者/消费者模式使用wait/notify更加方便。

    Exchanger中的exchange()方法具有阻塞的特点,此方法被调用后等待其他线程来取数据,如果没有其他线程取得数据,则一直阻塞等待。

    public class ThreadA extends Thread {
    	private Exchanger<String> exchanger;
    	public ThreadA(Exchanger<String> exchanger) {
    		super();
    		this.exchanger = exchanger;
    	}
    	@Override
    	public void run() {
    		try {
    			System.out.println("A线程获得的值:" + exchanger.exchange("String from threadA"));
    			System.out.println("threadA end");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    public class ThreadB extends Thread {
    	private Exchanger<String> exchanger;
    	public ThreadB(Exchanger<String> exchanger) {
    		super();
    		this.exchanger = exchanger;
    	}
    	@Override
    	public void run() {
    		try {
    			System.out.println("B线程获得的值:" + exchanger.exchange("String from threadB"));
    			System.out.println("threadB end");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    public class Main {
    	public static void main(String[] args) {
    		Exchanger<String> exchanger = new Exchanger<>();
    		ThreadA a = new ThreadA(exchanger);
    		a.setName("A");
    		ThreadB b = new ThreadB(exchanger);
    		b.setName("B");
    		a.start();
    		b.start();
    		System.out.println("main end");
    	}
    }
    

    运行程序,控制台打印结果如下:

    main end
    A线程获得的值:String from threadB
    threadA end
    B线程获得的值:String from threadA
    threadB end
    
  • 相关阅读:
    ZYNQ. Interrupt(1)Private Timer
    RaspberryPi.1.开机与远程桌面
    ZYNQ. DMA基本用法
    ZYNQ. LwIP.PHY.KSZ9031RNX
    Verilog笔记.三段式状态机
    c语言.函数指针数组
    c语言学习笔记.链表.
    D3D基本框架:即D3D头文件分类
    win32窗口:关于鼠标定位位置偏移问题的原因及解决方法
    <转>C++基础知识: 引用
  • 原文地址:https://www.cnblogs.com/umgsai/p/5671634.html
Copyright © 2011-2022 走看看