Semaphore
Semaphore是Java并发编程中常用到的,也叫信号量
- 一:用于多个共享资源的互斥访问,
- 二:控制并发线程数(这是相较于Synchronize的优势,当控制的并发线程数为1时,就等同于Synchronize,Lock锁)
模拟示例
- 模拟分车位,比如6个车抢占3个共享车位,同时最多只能3个车拥有车位,其他车排队等待,当车位空出来时,新的车进入车位,有增就有减
代码及注释
import java.util.concurrent.Semaphore;
public class Semaphoredemo {
public static void main(String[] args) {
final Semaphore semaphore = new Semaphore(3);
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + "\t 抢到车位");
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + "\t 停留后离开车位");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
}
};
for (int i = 1; i <= 6; i++) {
new Thread(runnable, String.valueOf(i)).start();
}
}
}
打印结果: