美文网首页Java-多线程
Semaphore计数信号量

Semaphore计数信号量

作者: From64KB | 来源:发表于2020-11-09 09:56 被阅读0次

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()
    }
}

很简单只需要在最前面后最后面加上acquirerelease即可。
如果是调用semaphore.tryAcquire()那么如果已经到达了最大访问数量,不会像acquire一样block住。

相关文章

网友评论

    本文标题:Semaphore计数信号量

    本文链接:https://www.haomeiwen.com/subject/djoqvktx.html