下面要给大家介绍的是semaphore,你对于semaphore有了解吗?java semaphore究竟是什么意思呢?一起通过下文来进行一下了解吧。
什么是semaphore?
java当中的semaphore是一种新的同步类,它是一个计数信号。
从概念上面来说的话,信号量维护了一个许可集合,假如是有必要的话,在许可可用之前,会阻塞每一个acquire(),之后,再获取该许可。
每一个release()添加一个许可,从可能释放一个正在阻塞的获取者,可是,不是用实际的许可对象,semaphore只对可用许可的号码进行计数,并且,采取相对应的行动。
信号量经常用在多线程的代码当中,比较典型的就是数据库连接池。
对于java当中的semaphore你都了解了吧,可以仔细的看看上面的介绍哦。
semaphore只有三个操作,一个是初始化,另外一个是增加,第三个就是减少。
示例:
import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class StudySemaphore { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); //信号量,只允许 3个线程同时访问 Semaphore semaphore = new Semaphore(3); for (int i = 0; i < 10; i++) { final long num = i; executorService.submit(new Runnable() { @Override public void run() { try { //获取许可 semaphore.acquire(); //执行 System.out.println("Accessing: " + num); Thread.sleep(new Random() .nextInt(5000)); // 模拟随机执行时长 //释放 semaphore.release(); System.out.println("Release..." + num); } catch (InterruptedException e) { e.printStackTrace(); } } }); } executorService.shutdown(); } }
对于semaphore的内容就给你介绍到这里啦,更多关于semaphore的常见问题,可以继续来奇Q工具网进行了解哦。
推荐阅读: