gpt4 book ai didi

java - 完成的线程会发生什么?

转载 作者:行者123 更新时间:2023-12-01 22:54:15 24 4
gpt4 key购买 nike

相对于这篇文章: use java execute shell command

执行此代码后

ExecutorTask task = new ExecutorTask();
Thread executorThread = new Thread(task);
executorThread.start();

当“任务”完成其工作时,任务和 executorThread 对象会发生什么?变成空?线程仍在内存中但已停止?GC会收集它们吗?

我的实际问题是:当可运行对象完成其工作时,线程对象会发生什么?

最佳答案

线程是对象,受GC约束。但是,即使您的代码中没有任何代码保留对线程的引用,在其 run 方法返回之前也不会对其进行 GC。你的任务是一个更普通的对象;线程有一个对它的引用,如果你没有其他对它的引用,它们将一起变成垃圾。

回应评论:对待线程不要与对待其他任何东西有任何不同。在 Java 中,通过创建一百万亿个东西并在不需要它们时保留对它们的引用,总是有可能造成内存泄漏。另一方面,很多时候,当我们“自然”地编写代码时,事情到了时间就变成了垃圾。如果您创建线程并将它们放入数组列表中,则只有在以下情况下才会出现问题:(a) 您创建无限数量的线程,并且 (b) 您永远不会放开数组列表。例如,如果您的程序为每个传入连接创建一个新线程,并将它们粘贴到列表中,并且从不删除它们,并且该列表(本质上)是一个全局变量。一种可能过于复杂的机制是在将线程放入列表之前将线程包装在 WeakReference 或 SoftReference 中,但这样仍然会泄漏列表空间。

关于java - 完成的线程会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333041/

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