美文网首页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