信号量,⽤来表⽰"可⽤资源的个数".本质上就是⼀个计数器.
Semaphore的PV操作中的加减计数器操作都是原⼦的,可以在多线程环境下直接使⽤.
acquire方法为P操作,使信号量-1.release方法为V操作,使信号量+1.
当信号量为0时,再进行P操作就要等待.
代码使用:
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(5);
Runnable runnable = new Runnable() {
public void run() {
try{
System.out.println("尝试获取资源");
semaphore.acquire();
System.out.println("拿到了资源");
Thread.sleep(1000);
System.out.println("释放了资源");
semaphore.release();
}catch (Exception e){
e.printStackTrace();
}
}
};
for (int i = 0; i < 20; i++) {
Thread thread = new Thread(runnable);
thread.start();
}
}


刚开始执行时,大量线程尝试获取资源,但是资源有限,即信号量为0,线程进行等待.当其他线程释放资源后,其他线程得知信号量不为0,进行P操作拿到资源.
672

被折叠的 条评论
为什么被折叠?



