Java-多线程

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

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

上一篇下一篇

猜你喜欢

热点阅读