扫码关注官方订阅号
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
如果你了解信号量的实现机制,那么这道题目也是一个意思。
public class Test { private final Integer maxCounter = 3; private Integer current = 0; public void call1() { //在这里补充代码 synchronized (this) { try { while (current.equals(maxCounter)) { // 请求 到达上限 wait(); } } catch (InterruptedException ex) { } current++; notifyAll(); } call2(current); synchronized (this) { try { while (current == 0) { wait(); } } catch (InterruptedException ex) { } current--; notifyAll(); } } private void call2(Integer current) { System.out.println(Thread.currentThread().getName() + ": I'm called " + current); // 下面的休眠 2 秒钟用于测试 try { Thread.sleep(2000); } catch (InterruptedException ex) { ex.printStackTrace(System.err); } } static class TestThread implements Runnable { private Test t; public TestThread(Test t) { this.t = t; } @Override public void run() { t.call1(); } } public static void main(String[] args) { Test t1 = new Test(); TestThread tt = new TestThread(t1); for (int i = 0; i < 10; i++) { Thread t = new Thread(tt, "Thread-" + i); t.start(); } } }
运行这段代码,你可以发现每 2 秒内,最多只有 3 (maxCounter)个线程在运行。
用CountDownLatch。。。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
如果你了解信号量的实现机制,那么这道题目也是一个意思。
运行这段代码,你可以发现每 2 秒内,最多只有 3 (maxCounter)个线程在运行。
用CountDownLatch。。。