gpt4 book ai didi

java - 当这个新的Thread()在Android中被GC时?

转载 作者:行者123 更新时间:2023-12-02 09:13:53 25 4
gpt4 key购买 nike

我有一个 util 类,我试图在其中写入安全设置,例如,

public static void putIntInSS(final ContentResolver resolver, final String key,
final int value) {
new Thread(new Runnable() {
@Override
public void run() {
Settings.Secure.putInt(resolver, key, value);
}
}).start();
}

这个new Thread()什么时候会被GC?在我的应用程序中使用 new Thread() 代替 Handler 是否合适?如果以这种方式使用线程有一些缺点,它们是什么?

最佳答案

您的线程一完成就会成为 GC 的候选者。请参阅here .

“在我的应用程序中使用 new Thread() 而不是 Handler 是否合适?”

一句话,“不”。在开始在生产代码中添加额外的线程之前,您应该确保了解多线程的所有优点和缺点以及正确的并发技术。很难夸大基于消息的队列系统(例如,Handler)的优雅,特别是对于基于消息驱动的 UI 的应用程序(Android、Windows)。 Handler 是创建并发假象的有效方法,即使它仅限于单个线程的吞吐量。

“以这种方式使用线程的一些缺点......”

嗯,有很多。我将继续并开始列出列表:

  • 不保证以这种方式进行的操作将按任何特定顺序执行。
  • 无法保证操作会及时开始。
  • 由于与创建/调度线程相关的开销,该操作实际上可能最终执行得更慢,并且 context switching .

如果在短时间内启动多次这样的操作,上述问题将会变得更加严重。此外:

  • 您永远无法知道操作是否(或何时)完成。 (这需要额外的代码。)特别是,当使用传递给“外部”方法的对象时,您无法确定在“外部”方法返回时线程是否已使用它们。
  • 该技术增加了代码复杂性;你可以看到它有多么冗长。
  • 您在另一个线程上进行的任何操作都必须适当注意并发性。如果存在并发访问的可能性,您必须确保您调用的方法是线程安全的。可能需要进行详细的同步工作。
  • 错误处理变得复杂。

很多软件工程都是关于如何避免不必要的复杂性。让事情变得简单。有时您会有苛刻的性能要求;这些项目需要仔细规划并详细了解 CPU 的工作原理。大多数时候,一个软件最重要的事情就是它正确。为此,保持单线程更容易。

关于java - 当这个新的Thread()在Android中被GC时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59162534/

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