他是一个线程同步结构,用于在线程之间通讯,就像加了一把锁一样,防止我们的信号消失(保护这块区域)。
Semaphore是J.U.C包下的一个类。多个线程可以通过他进行共享资源。它内部维护了一个计数器(计数器表示同时访问的最大访线程数)。然后还有两个重要方法。
acquire() ; 当我们进行访问资源时的时候我们会进行对那个计数器-1; (计数器必须要大于等于0)再去访问资源
release() ; 当我们访问完了资源需要退出的时候。这个方法要在finally里面写。
另外逼逼一下: Semaphore里面有一个属性Sync 。这个属性继承自AQS,所以它上面那个技术器的做法大家也就不陌生了。
信号量这个东西不难,就是限制对某段代码执行的线程数。其中就是公平信号量和非公平信号量,这也是为什么里面出现的这些AQS,公平信号量就是那些没有获得到进入许可的线程会进入一个等待队列里面。而非公平队列会进入一个等待池里面。
关于信号量的使用,可以去网上看。很多。不难