您的位置:首页 > 编程语言 > Java开发

java.util.concurrent.Semaphore

2015-11-25 15:48 519 查看
public class SemaphoreDemo {

public static void main(String[] args) {
//信号量,解决了允许固定个数的线程同时访问共享资源
final Semaphore semaphore = new Semaphore(3);
for (int i = 0; i < 10; i++) {

new Thread(new Runnable() {

@Override
public void run() {
try {
semaphore.acquire();// 获得许可

System.out.println(Thread.currentThread().getName()
+ ": 来了...现在有"+(3-semaphore.availablePermits())+"位顾客");

TimeUnit.SECONDS.sleep(new Random().nextInt(5));
System.out.println("-->"+Thread.currentThread().getName()
+ ": 走了...");

semaphore.release();// 释放许可
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}).start();
}
}
}


Thread-0: 来了...现在有1位顾客
Thread-2: 来了...现在有3位顾客
Thread-1: 来了...现在有2位顾客
-->Thread-2: 走了...
Thread-4: 来了...现在有3位顾客
-->Thread-1: 走了...
Thread-6: 来了...现在有3位顾客
-->Thread-0: 走了...
-->Thread-4: 走了...
Thread-8: 来了...现在有3位顾客
Thread-5: 来了...现在有3位顾客
-->Thread-5: 走了...
Thread-9: 来了...现在有3位顾客
-->Thread-6: 走了...
Thread-3: 来了...现在有3位顾客
-->Thread-3: 走了...
Thread-7: 来了...现在有3位顾客
-->Thread-8: 走了...
-->Thread-9: 走了...
-->Thread-7: 走了...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: