单机版高并发--Semaphore

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值