java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用
2017-09-27 10:50
399 查看
先来讲解一下Semaphore信号灯的作用:
可以维护当前访问自身的线程个数,并提供了同步机制,
使用semaphore可以控制同时访问资源的线程个数
例如,实现一个文件允许的并发访问数。
请看下面的演示代码:
执行结果如下:
View Code
以上都是java 5中的一些知识点,大家可以根据实际工作中的需要进行选择使用!!
可以维护当前访问自身的线程个数,并提供了同步机制,
使用semaphore可以控制同时访问资源的线程个数
例如,实现一个文件允许的并发访问数。
请看下面的演示代码:
public class SemaphoreTest { public static void main(String[] args) { //创建一个带有缓存的线程池 ExecutorService service = Executors.newCachedThreadPool(); //创建三个信号灯 final Semaphore sp = new Semaphore(3);//最多并发三个线程 此处可以按照需求去修改 //开启十个线程 for (int i = 1; i <= 10; i++) { //只有三个线程可以同时进入 其余线程等待 service.execute(new Runnable() { @Override public void run() { try { sp.acquire();//获取一盏信号灯 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程 "+Thread.currentThread().getName()+" 进入" + " ,当前已有 "+(3-sp.availablePermits())+ " 个并发"); try { Thread.sleep(new Random().nextInt(1000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程 "+Thread.currentThread().getName()+" 即将离开 "); sp.release();//释放 System.out.println("线程 "+Thread.currentThread().getName()+" 已经离开" + " ,当前已有 "+(3-sp.availablePermits())+ " 个并发"); } }); } service.shutdown(); } }
执行结果如下:
线程 pool-1-thread-1 正要把zhangsan换出去 线程 pool-1-thread-2 正要把lisi换出去 线程 pool-1-thread-1换回的数据为lisi 线程 pool-1-thread-2换回的数据为zhangsan
View Code
以上都是java 5中的一些知识点,大家可以根据实际工作中的需要进行选择使用!!
相关文章推荐
- java多线程-Semaphore信号量使用 介绍 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源
- java线程中join方法原理,以及守护线程的使用
- java线程以及synchronized关键字的使用
- JAVA-Semaphore信号灯-可实现维护自身线程访问数
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- Java线程之信号灯的使用
- 【Java并发】 - CountDownLatch使用以及原理
- Java_基础—线程组和线程池的概述和使用以及线程的生命周期
- Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
- Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信
- (7)java5线程并发库的应用(线程池) 以及在实际项目中的使用。。
- Java多线程基础,线程的创建使用以及终止
- Java多线程研究06-带返回值的线程定义接口Callable以及Future,FutureTask的使用
- java中线程中的sleep的使用(计数器)
- java中俩种方法实现一个线程,以及不推荐使用stop()和suspend()方法
- java使用CountDownLatch实现线程顺序执行
- 线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁
- Java中CountDownLatch,CyclicBarrier以及Semaphore的使用场景
- java 中的wait和notify以及synchronized的使用,实现两个线程交替执行