Semaphore: 控制访问线程资源数量类
构造方法:
// permits为访问线程的数量
Semaphore semaphore = new Semaphore(int permits);
主要方法:
semaphore.acquire() : 获取运行许可,并阻塞其他线程
semaphore.release() : 释放许可,让其他线程运行
使用场景:
控制该段代码,每次最多两个线程执行
代码:
线程类:
class JymSemaphoreThread implements Runnable{
// 控制访问线程资源数量类
private Semaphore semaphore;
public JymSemaphoreThread(Semaphore semaphore) {
this.semaphore = semaphore;
}
public void run() {
try {
// 获取运行许可,并阻塞其他线程
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + "阻塞并获取许可");
// 释放许可,让其他线程运行
System.out.println(Thread.currentThread().getName() + "释放许可");
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试代码:
public static void main(String[] args) {
// 每次最多两个线程访问资源,当有线程调用release方法后才会有线程进入
Semaphore semaphore = new Semaphore(2);
JymSemaphoreThread jymSemaphoreThread = new JymSemaphoreThread(semaphore);
for(int i = 0 ; i<5 ;i++){
new Thread(jymSemaphoreThread).start();
}
}
结果: