Java 线程是否需要任何清理?

2022-09-04 08:21:14

我看到所有停止和销毁以及处理清理方法的任何其他内容都已被弃用。

如果我有一个新的 Thread() 或一个扩展 Thread 运行的类,除了让它到达常规执行的末尾之外,我是否需要在其 run() 方法中执行其他任何操作?或者是否有一个后台机制可以理解线程已经运行了所有任务并且可以被销毁?


答案 1

当您调用线程时,靠近操作系统的 JVM 中的本机机制正在启动线程,最终执行 。完成后,JVM负责一切。start()run()run()

您可能担心垃圾回收或其他资源清理。当然,如果您在线程内打开文件/网络连接,则必须像其他任何地方一样关闭它。此外,垃圾回收器在分析活动对象时会考虑从正在运行的线程引用的对象。但是线程完成的那一刻,它引用的所有对象(或传递给线程的实现)都有资格进行垃圾回收。Runnable

快速&脏编辑线程的退出方法,因为可见上下文ClassLoader缺少x.x

private void exit() {
    if (group != null) {
        group.remove(this);
        group = null;
    }
    /* Aggressively null out all reference fields: see bug 4006245 */
    target = null;
    /* Speed the release of some of these resources */
    threadLocals = null;
    inheritableThreadLocals = null;
    inheritedAccessControlContext = null;
    blocker = null;
    uncaughtExceptionHandler = null;
}

答案 2

无需清理。一旦它完成了任务,jvm就会杀死它。