多线程编程入门(15):线程同步工具之Semaphore(信号量)
2016-08-04 01:25
246 查看
package cn.itcast.heima2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class SemaphoreTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); 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((long)(Math.random()*10000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程"+ Thread.currentThread().getName() + "即将离开"); semaphore.release(); //下面的代码有时候不准确,因为其没有和上面的代码合成原子单元 System.out.println("线程"+ Thread.currentThread().getName() + "已离开,当前已有" + (3-semaphore.availablePermits())+"个并发"); } }; service.execute(runnable); } } }
参考链接
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html
相关文章推荐
- 线程同步工具类之信号量(Semaphore)
- Java并发学习之十六——线程同步工具之信号量(Semaphores)
- 秒杀多线程第七篇 经典线程同步 信号量Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 多线程编程入门(17):线程同步工具之CountDownLatch
- C#线程同步(5)- 信号量 Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 多线程编程入门(18):线程同步工具之Exchanger
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 多线程之八 经典线程同步 信号量Semaphore
- C# 线程同步(5)- 信号量 Semaphore
- 线程同步 信号量 Semaphore 内核对象 CreateSemaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 线程同步----信号量(Semaphore)
- 多线程编程入门(16):线程同步工具之CyclicBarrier
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 经典线程同步 信号量Semaphore
- 《java并发编程实战》:线程同步辅助类之信号量(semaphore)