java - 控制并发线程数
问题描述
问题解答
回答1:如果你了解信号量的实现机制,那么这道题目也是一个意思。
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();} }}
运行这段代码,你可以发现每 2 秒内,最多只有 3 (maxCounter)个线程在运行。
回答2:用CountDownLatch。。。
相关文章:
1. index.php错误,求指点2. html5和Flash对抗是什么情况?3. vue.js - Vue 如何像Angular.js watch 一样监听数据变化4. javascript - QWebEngineView 如何爬 angular 的动态数据?5. objective-c - iOS 关于上传word文档问题6. java - 多叉树求值,程序高手,算法高手看过来7. javascript - webupload上传图片到node服务8. html - 只有一个div时如何利用css画出自己需要的任意图形?有哪些限制?9. javascript - 安装cnpm一直出错10. html - 爬虫时出现“DNS lookup failed”,打开网页却没问题,这是什么情况?
