Java并发基础(六)-Exchanger和Semaphore
2016-10-07 15:28
330 查看
1. Exchanger
Exchanger提供了 一个同步点 , 在这个同步点,两个线程可以交换数据,每个线程通过exchange()方法的入口提供数据给另外的线程,并接收其它线程提供的数据,并返回。看个简单的例子:
public static void main(String[] args){ final Exchanger exchanger = new Exchanger(); new Thread(new Runnable() { @Override public void run() { System.err.println("我" + "我吧钱给你了"); try { String result = (String) exchanger.exchange("50块钱"); System.err.println("我收到-->"+result); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); System.err.println("老板"+"等钱到账中"); String result = (String) exchanger.exchange("烟"); System.err.println("老板收到-->"+result); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); }
可以看到 Exchanger(交换器)的用法还是很简单的。
2. Semaphore
计数信号量。通过acquire()和release()获取和释放访问许可。public static void main(String[] args){ final Semaphore semaphore = new Semaphore(2); for (int i = 0; i < 10; i++) { final int finalI = i; new Thread(new Runnable() { @Override public void run() { try { semaphore.acquire(); Thread.sleep(5000); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }
当我们不释放的时候,无法获取信号量的线程无法继续执行
当信号量为1的时候,可以实现线程同步。
相关文章推荐
- Java_并发线程_Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- Java并发包:Exchanger和Semaphore
- 《Java 7 并发编程指南》学习概要 (3)Semaphore, CountDownLatch, CyclicBarrier , Phaser, Exchanger
- Java_并发线程_Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- Java并发工具包——CountDownLatch / Java并发工具包——CyclicBarrier / Java并发工具包——Semaphore / Java并发工具包——Exchanger
- 第8章 Java中的并发工具类(CountDownLatch CyclicBarrier Semaphore Exchanger)
- 《Java Concurrency》读书笔记,Java并发编程实践基础
- [沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
- Java并发总结(一):线程基础
- Java并发基础
- java 多线程基础--多线程及并发
- 建立和理解Java 并发的基础
- 黑马程序员_基础加强_Java线程通信和线程并发库
- Java基础24天--03--网络编程(TCP--客户端并发登陆)
- JAVA基础 (一) 并发 ThreadLocal与Synchronized 用哪一个好
- Java并发总结(一):线程基础
- Java并发基础构建模块简介
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- Java基础24天--02--网络编程(TCP--客户端并发上传图片)
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger