实现效果为 : 某个方法调用并发限制在2个,并发超出则等待
import lombok.SneakyThrows;
import java.util.Date;
import java.util.concurrent.Semaphore;
public class SemaphoreTest {
public static void main(String[] args) {
// 模拟10个并发
for (int i = 0; i < 10; i++) {
int finalI = i;
new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
method(finalI);
}
}).start();
}
}
// 定义信号量(并发数)
private static Semaphore semaphore = new Semaphore(2);
public static void method(int i) throws InterruptedException {
semaphore.acquire();
// 停止1秒,来验证并发数
Thread.sleep(1000);
System.err.println((new Date()) + " - " + i);
semaphore.release();
}
}
效果图