Java Threads需要进行任何清理吗?

Gen*_* S. 13 java multithreading

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

如果我有一个新的Thread()或一个扩展Thread运行的类,我是否需要在run()方法中做任何事情,而不是让它到达常规执行的末尾?或者是否有一个后台机制可以理解Thread已经完成了所有任务并且可以被销毁?

Tom*_*icz 13

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

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

对于Thread的exit方法的快速和脏编辑,因为可见的contextClassLoader缺少xx

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;
}
Run Code Online (Sandbox Code Playgroud)


小智 9

不需要清理.一旦它完成任务,jvm将杀死它.