java - 控制并發(fā)線程數(shù)
問題描述
問題解答
回答1:如果你了解信號量的實現(xiàn)機制,那么這道題目也是一個意思。
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;}@Overridepublic 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();} }}
運行這段代碼,你可以發(fā)現(xiàn)每 2 秒內,最多只有 3 (maxCounter)個線程在運行。
回答2:用CountDownLatch。。。
相關文章:
1. Java反射問題:為什么android.os.Message的recycleUnchecked方法不能通過反射獲取到?2. 如何分別在Windows下用Winform項模板+C#,在MacOSX下用Cocos Application項目模板+Objective-C實現(xiàn)一個制作游戲的空的黑窗口?3. html5和Flash對抗是什么情況?4. php如何獲取訪問者路由器的mac地址5. javascript - 在 vue里面用import引入js文件,結果為undefined6. javascript - ...mapGetters和...mapState獲取到的state,怎么拿來在methods中操作?7. 小程序怎么加外鏈,語句怎么寫!求救新手,開文檔沒發(fā)現(xiàn)8. python - linux怎么在每天的凌晨2點執(zhí)行一次這個log.py文件9. javascript - vue-resource中如何設置全局的timeout?10. 前端 - node vue webpack項目文件結構
