朋友在写抽奖活动的时候,为了控制线程,用到了Semaphore类 ,之前也是没有用到过,就简单认识一下它。
Semaphore,是负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。也是操作系统中用于控制进程同步互斥的量。或者说,简单的来讲,就
是信号量。
比如我们去网吧开机子上网(原谅楼主是个网瘾少年),网吧总共只有100台机子,也就是只可能有100个人同时上网,也就是信号量为100,代码表示
的话就是 static Semaphore = new Semaphore(100), 这个时候来了150个人要上网怎么办呢? 没办法,我这最多上100个人,给100个人加上凭证,让他们
上网, 代码模拟下 、
for(int i=0;i<150;i++){//模拟150个准备上网的用户
Runnable run = new Runnable() {
public void run() {
try {
// 获取许可
//网管给上网许可
semp.acquire();
System.out.println("Accessing: " + i);
// 访问完后,释放
//钱用完了,下机,下机几个人,就有几个空机器,给后面的人上网
semp.release();
System.out.println("-----------------"+semp.availablePermits());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
只有有人下机后 才会有机器给后来的人用,而semaphore就是设置有几台机器的