Semaphore计数信号量
2020-11-09 本文已影响0人
From64KB
Semaphore被用于控制同时访问的线程数量。举个例子,从数据库中查询个人信息,由于数据库连接需要消耗资源,所以不能无限制的增加连接数。为了防止高并发下一次有数百个线程同时访问,就需要控制能同时访问的线程数量,将超出数量的线程block住。使用方法见下面例子:
private val semaphore = Semaphore(3)//最多3个线程同时访问
class TestSemaphore : Runnable {
override fun run() {
semaphore.acquire()//Java下需要try catch
//或者
semaphore.acquireUninterruptibly()//无需try catch
//do something
doSomething()
semaphore.release()
}
}
很简单只需要在最前面后最后面加上acquire
和release
即可。
如果是调用semaphore.tryAcquire()
那么如果已经到达了最大访问数量,不会像acquire
一样block住。