84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
拥有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。。。
如果你了解信号量的实现机制,那么这道题目也是一个意思。
运行这段代码,你可以发现每 2 秒内,最多只有 3 (maxCounter)个线程在运行。
用CountDownLatch。。。