gpt4 book ai didi

java - 创建线程并且从不启动它是否会对性能产生影响?

转载 作者:行者123 更新时间:2023-11-29 06:26:58 24 4
gpt4 key购买 nike

我正在处理一个现有的 Java 代码库,它有一个扩展 Thread 的对象,并且还包含一些与线程本身的操作相关的其他属性和方法。在以前版本的代码库中,线程始终是一个实际的、重量级的 Thread,它以 Thread.start 开始,以 Thread.join 等待> 等。

我目前正在重构代码库,在当前版本中,并不总是需要对象的 Thread 功能(但由于对象中包含的其他功能,对象本身是必需的;在很多情况下,即使线程本身没有运行,它也是可用的)。因此,在某些情况下,应用程序会创建这些对象(扩展 Thread)并且从不对它们调用 .start(),而只是将它们用于其他属性和方法。

在未来,应用程序可能需要创建比以前更多的此类对象,以至于我可能需要担心性能问题。显然,创建和启动大量实际线程将是一场性能噩梦。同样的事情是否适用于从未启动的 Thread 对象?也就是说,是否仅需要任何操作系统资源或大型 Java 资源来创建 Thread?还是仅当 Thread 实际上是 .start 时才使用资源,从而使未启动的 Thread 对象可以安全地大量使用?重构代码以将与线程无关的功能拆分为一个单独的函数是可能的,但如果这样做完全没有意义,我不想进行大规模重构。

我试图通过一些网络搜索来确定这个问题的答案,但是很难找到查询的目标,因为搜索引擎通常无法将 Thread 对象与实际的 Java 线程区分开来。

最佳答案

您可以实现 Runnable 而不是扩展 Thread

public class MyRunnableClass implements Runnable {

// Your stuff...

@Override
public void run() {
// Thread-related stuff...
}

}

每当你需要运行你的对象作为一个线程时,只需使用:

Thread t = new Thread(new MyRunnableClass());
t.start();

关于java - 创建线程并且从不启动它是否会对性能产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53295661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com