java - 创建和终止线程与使用 .notify() 和 .wait()

标签 java multithreading

假设一个控制线程可以访问一堆线程以及该线程将等待的对象。如果我必须从这个单一控制线程启动和停止,其中几个线程正在做什么,哪一个会对性能产生更大的影响?

例如通过中断杀死它并使用相同的 Runnable 创建一个新的不是更好吗?

最佳答案

创建(实际上是start()-ing)一个新线程相对昂贵,因此从性能角度来看,最好使用wait/notify .

其次,中断不能保证“停止”线程。线程可能会选择忽略中断...或者如果它纯粹受 CPU 限制,则可能根本不会注意到它。

还有第三种选择:使用现有的线程池机制。例如,ExecutorService API 有多种提供有界和无界线程池的实现。这些可以负责扩展和缩小以及池关闭。您可以通过submit(...)将任务用作Runnable实例来使用它们,并且您可以选择获得一个Future,它允许您等待任务完成。

最后,对于大多数并发编程用例,都有支持该用例的标准类,最好使用它们而不是尝试从头开始实现;例如直接使用等待/通知。在您的情况下,您可能需要某种“屏障”机制:java.util.concurrent.Phaser可能就是您需要的。

关于java - 创建和终止线程与使用 .notify() 和 .wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26580984/

相关文章:

java - 带数字键盘的按键监听器?

java - IndexedDB 在 Android 原生应用中工作

Java - 创建一个可以通过其他方法操作和打印的二维数组

c - debian 发行版上的 RTAI - 不确定为什么这个 C 线程代码(实现一个简单的计数器)会导致 linux 崩溃

java - 理解spring singleton在启动时加载实体

java - 工厂模式和策略模式

java - 如何在java中将数据加密为没有特殊字符的纯文本

multithreading - Racket 支持多线程吗?

java - JCIP SafePoint - 它真的是线程安全的吗?

python - 信号量变量如何传递到Python中的以下对象中?