java多线程同步工具之Semaphore信号灯
2014-06-01 15:10
232 查看
Semaphore可以维护当前访问自身的线程个数,并提供了同步机制,使用Semaphore可以控制同时访问资源的个数。举一个通俗的例子:厕所里有5个坑,加入有十个人要上厕所,那么同时只能有5个人能够占用,当这5个人中的任何一个人用完之后,等待的5个人中又有一个人可以占用。
方法:
acquire():霸占一个信号灯。
availablePermits():获取可以提供的信号灯。
release():释放信号灯。
案例:
方法:
acquire():霸占一个信号灯。
availablePermits():获取可以提供的信号灯。
release():释放信号灯。
案例:
public class SemaphoreTest { public static void main(String[] args) { /*创建一个线程池*/ ExecutorService executorService = Executors.newCachedThreadPool(); /*创建一个信号灯对象【初始化3个灯】*/ final Semaphore semaphore = new Semaphore(3); for (int i=0; i<10;i++){ Runnable runnable = new Runnable() { @Override public void run() { /*************获取一个信号灯************/ try { semaphore.acquire(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() +", 进入,当前已有 " + (3 - semaphore.availablePermits()) +"并发"); /************休眠******************/ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } /**************释放信号灯*************/ System.out.println(Thread.currentThread().getName() +"即将离开"); semaphore.release();//释放信号灯 System.out.println(Thread.currentThread().getName() +", 已离开,当前还有 " + (3 - semaphore.availablePermits()) +"并发"); } }; /*执行*/ executorService.execute(runnable); } } }
相关文章推荐
- Java线程(九):Semaphore-信号灯机制
- Java5 多线程(四)--Semaphore实现信号灯
- 【java并发】线程同步工具Semaphore的使用
- Android 价值千万java多线程同步 <五>CountDownLatch(计数器)和Semaphore(信号量)
- java 信号灯 Semaphore
- Semaphore 信号灯 java示例
- java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用
- JAVA-Semaphore信号灯-可实现维护自身线程访问数
- Java—Semaphore实现信号灯
- Java线程同步工具-Semaphore
- 同步工具之Semaphore实现信号灯
- Java多线程同步工具之CyclicBarrier
- [C#学习笔记之多线程2]多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore .
- Java高级之信号灯Semaphore
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- Java5 多线程(四)--Semaphore实现信号灯
- JAVA Semaphore实现信号灯
- java多线程同步工具之Exchanger
- java多线程(三)-同步工具Semaphore
- java并发工具Semaphore的理解和使用