84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
If you understand the implementation mechanism of semaphore, then this question also has the same meaning.
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(); } } }
Run this code, you can find that only 3 (maxCounter) threads are running at most every 2 seconds.
Use CountDownLatch. . .
If you understand the implementation mechanism of semaphore, then this question also has the same meaning.
Run this code, you can find that only 3 (maxCounter) threads are running at most every 2 seconds.
Use CountDownLatch. . .