浅谈Semaphore类-示例
Semaphore类有两个重要方法
1、semaphore.acquire();
请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release()的时候,信号量不为0的时候才可以继续执行acquire
2、semaphore.release();
释放一个信号量,这时候信号量个数+1,
3、这个类使用的目的为:如何控制某个方法允许并发访问线程的个数?
也就是说在线程里执行某个方法的时候,在方法里用该类对象进行控制,就能保证所有的线程中最多只有指定信号量个数个该方法在执行。
package Semaphore;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class SemaphoreTest {
private static Semaphore semaphore = new Semaphore(2);
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
threadLog();
}).start();
}
}
private static void threadLog() {
try {
semaphore.acquire();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("线程:" + Thread.currentThread().getName() + "执行了一个acquire请求操作");
try{
TimeUnit.SECONDS.sleep(1);
}catch (Exception ex){
ex.printStackTrace();
}
semaphore.release();
System.out.println("线程:"+Thread.currentThread().getName()+"执行了一个release请求操作");
}
}
结果如下:

欢迎关注微信公众号:大数据从业者

浙公网安备 33010602011771号