Semaphore
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就是允许几个线程访问的东西