详情
桃花潭水深千尺
作者: 西魏陶渊明 博客: https://blog.springlearn.cn/ (opens new window)
西魏陶渊明
莫笑少年江湖梦,谁不少年梦江湖
Semaphore
翻译过来就是信号量, 其根本原理就是基于 CAS
共享锁的一种实现。举一个例子。
假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入一辆,如果又离开两辆,则又可以放入两辆,如此往复。
那么上面的这个例子可以这样理解,资源一共有3个, 即三个车位。如何来控制这5辆汽车,来合理的使用这3个资源呢?
Semaphore
可以这样来定义。
// 1. 定一个信号量,声明有3个资源。使用公平模式线程将会按到达的顺序(FIFO)执行(也就是等待时间最长的先执行),如果是非公平,则可以后请求的有可能排在队列的头部。
Semaphore semp = new Semaphore(3);
// 2. 获取1个许可 - 最大允许3个进入,一但超过就让其等待,除非已经释放
semp.acquire();
// 3. 释放1个许可
semp.release();
// 4. 获取1许可,失败就返回,不等待
semp.tryAcquire();
// 5. 获取2许可,失败就返回,不等待
semp.tryAcquire(2);
// 6. 不允许被中断
semp.acquireUninterruptibly();
Semaphore
的模式配置,只是构造来定义。
public Semaphore(int permits) {
sync = new NonfairSync(permits);
}
public Semaphore(int permits, boolean fair) {
sync = fair ? new FairSync(permits) : new NonfairSync(permits);
}
false
,如果线程中断,会直接中断。该应用可以安装在您的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和您的操作系统安全地进行交互。
桃花潭水深千尺