Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中对线程的引用何时超出范围?_Java - Fatal编程技术网

java中对线程的引用何时超出范围?

java中对线程的引用何时超出范围?,java,Java,当我们在Java中定义新线程时,线程的引用何时脱离上下文?例如,如果我创建一个WeakHashMap,什么时候会从这个Hashmap中删除一个死线程条目 另外,如果线程池用于执行某个任务(Runnable),那么hashmap中的引用是否会被删除?只要线程是活动的,它就是垃圾收集根。一旦终止,它就有资格从弱散列映射中删除 第二部分,参考什么?如果引用指向可运行任务,线程池持有的引用将在线程池完成任务执行后消失。池中的线程将继续执行任务,直到池关闭或由于未捕获异常而死亡 >只要线程处于活动状态,它

当我们在Java中定义新线程时,线程的引用何时脱离上下文?例如,如果我创建一个
WeakHashMap
,什么时候会从这个Hashmap中删除一个死线程条目


另外,如果线程池用于执行某个任务(
Runnable
),那么hashmap中的引用是否会被删除?

只要线程是活动的,它就是垃圾收集根。一旦终止,它就有资格从弱散列映射中删除


第二部分,参考什么?如果引用指向可运行任务,线程池持有的引用将在线程池完成任务执行后消失。池中的线程将继续执行任务,直到池关闭或由于未捕获异常而死亡

>只要线程处于活动状态,它就是垃圾收集根。因此,如果我有一个静态的
WeakHashMap
,其中有一个对我生成的线程的引用,运行一个runnable并关闭它,它将被删除,对吗?同样在第二部分中,我想问:如果我使用ThreadPoolExecutor执行runnable,并且希望在映射中存储与执行此runnable的线程相关联的数据,那么它会在runnable执行完成时被删除吗?但正如您所指定的,池中的线程在执行后不会死亡,因此我猜此引用不会被删除。@ayush:不清楚“存储与线程关联的数据”是什么意思。我有一些与每个线程关联的信息(存储在对象中的度量值)(当前作为threadlocal变量)。当我生成一个新线程时,我希望子线程拥有这个信息,添加到其中并将其返回给父线程,但不希望通过传递一个对象并返回这个对象来显式地执行此操作,因为这个信息与度量相关,而不是实际的业务逻辑。此外,我们没有在每个方法中传递它,而是使用了一个静态ThreadLocal变量来存储此信息(我打算用映射来替换此信息,并因此提出关于可能内存泄漏的问题)