java – 如何避免死锁和使用太多线程?

使用Executors.newFixedThreadPool(int nThreads)是一种很好的方法来最小化创建太多线程的开销,但是如果所有线程都在等待另一个本身正在等待池中的空闲线程的作业,则可能导致死锁.有时问题可以通过使用多个线程池来解决,但有时却不能解决.我正在寻找与newFixedThreadPool类似的行为,除非所有池化线程都被阻塞 – 在这种情况下,尽管有预定义的绑定,池也应该增长.有这样的事吗?

实际上,僵局在这里并不重要.真正的问题是“如何管理正在运行的线程数”而不是它们的总数.在尝试保持CPU充分利用而不会产生不必要的许多线程时,这也很有趣.

如果您有争用问题,这是一个设计问题.如果你想要如你所描述的那样快速修复,你只会治愈症状,而不是潜在的疾病.

您应该重构您的设计以使用其他方法消除死锁.

相关文章
相关标签/搜索