Semaphore信号量
主要用于两个目的:
- 用于多个共享资源的互斥使用
- 用于并发线程数的控制
假设一个小型停车场有3个车位,此时有五辆车同时开进来,那么必有3辆车抢到车位,而剩下的2辆车需要等待车位
public class SemaphoreDemo {
public static void main(String[] args) {
final Semaphore semaphore = new Semaphore(3);
for (int i = 1; i <= 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+"\t 抢到车位");
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName()+"\t 3秒后离开车位");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
semaphore.release();
}
}
},String.valueOf(i)).start();
}
}
}
--------------------
1 抢到车位
3 抢到车位
4 抢到车位
1 3秒后离开车位
3 3秒后离开车位
2 抢到车位
4 3秒后离开车位
5 抢到车位
5 3秒后离开车位
2 3秒后离开车位