Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施,也是操作系统中用于控制进程同步互斥的量。 上面解释是百度百科,说直白点,Semaphore 就是控制方法能被几个线程访问的东西 下面举例
现在有一辆汽车,只能坐5个人,没坐上的等下一班(假如现在就一辆汽车),那么怎么控制这个5呢
public class B { Semaphore semaphore = new Semaphore(5); public void ride() throws Exception { // 允许5个人乘车 semaphore.acquire(); System.out.println(Thread.currentThread().getName() + "上车了"); System.out.println(); // 阻塞10秒---看看到底几个线程进来了 Thread.sleep(10000); semaphore.release(); } public static void main(String[] args) { B b = new B(); for (int i = 0; i < 20; i++) { new Person("张" + i, b).start(); } } } class Person extends Thread { B b; public Person(String name, B b) { this.setName(name); this.b = b; } @Override public void run() { try { b.ride(); } catch (Exception e) { e.printStackTrace(); } } }运行结果,在阻塞10秒期间—不释放资源的情况下,只有5个线程能进入,释放一个,就立马有线程去抢
张0上车了 张1上车了 张2上车了 张3上车了 张4上车了
Semaphore解决高并发的API时,以限定线程数量为代价保证系统的稳定,不会让系统在高并发的情况下死掉,总而言之Semaphore就是允许几个线程访问的东西