Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 从扩展runnable的类列表中删除项是否会终止其线程?_Java_List_Timer_Runnable - Fatal编程技术网

Java 从扩展runnable的类列表中删除项是否会终止其线程?

Java 从扩展runnable的类列表中删除项是否会终止其线程?,java,list,timer,runnable,Java,List,Timer,Runnable,我正在用Java编写一个聊天服务器。我使用的是一个固定的可运行类数组,其中数组中的每个元素表示一个客户机。创建的线程位于从套接字流读取的无限循环中 现在我想用一个列表来做,这样我就不必担心数组的大小,而且这样做听起来更合法。但是,我不能确定删除项目是否也会终止线程。实际上我不知道它是干什么的。另外,我想知道在这种情况下使用列表是否还有其他可能的问题。最后,计时器数组怎么样?由于我已经为每个客户机使用了计时器,那么从计时器列表中删除计时器是否也会停止其计划?任何可能的问题?对象本身存在-在列表中存

我正在用Java编写一个聊天服务器。我使用的是一个固定的可运行类数组,其中数组中的每个元素表示一个客户机。创建的线程位于从套接字流读取的无限循环中


现在我想用一个列表来做,这样我就不必担心数组的大小,而且这样做听起来更合法。但是,我不能确定删除项目是否也会终止线程。实际上我不知道它是干什么的。另外,我想知道在这种情况下使用列表是否还有其他可能的问题。最后,计时器数组怎么样?由于我已经为每个客户机使用了计时器,那么从计时器列表中删除计时器是否也会停止其计划?任何可能的问题?

对象本身存在-在列表中存储对该对象的引用不会改变其行为

因此,如果您有一个在线程中运行的可运行任务,那么将其添加到列表中或从列表中删除不会对该可运行任务产生影响,线程将继续运行该任务

这同样适用于计时器和任何其他对象


旁注:有一种情况下,从列表中删除一个对象会产生影响:如果该对象只能通过该列表访问。在被删除后,因为它不再可访问,所以它有资格进行垃圾收集。但这不适用于正在运行的线程或活动计时器。

对象本身存在-在列表中存储对该对象的引用不会改变其行为

因此,如果您有一个在线程中运行的可运行任务,那么将其添加到列表中或从列表中删除不会对该可运行任务产生影响,线程将继续运行该任务

这同样适用于计时器和任何其他对象


旁注:有一种情况下,从列表中删除一个对象会产生影响:如果该对象只能通过该列表访问。在被删除后,因为它不再可访问,所以它有资格进行垃圾收集。但这不适用于正在运行的线程或活动计时器。

您有一个线程对象。对它的引用已插入到数组中。从数组(即线程)中添加或删除引用不会导致任何未知的副作用,因此您是好的。如果要停止线程,必须在
run
方法内部实现。垃圾收集在这里不是问题


计时器还是同样的问题:它们都是对象引用。

您有一个线程对象。对它的引用已插入到数组中。从数组(即线程)中添加或删除引用不会导致任何未知的副作用,因此您是好的。如果要停止线程,必须在
run
方法内部实现。垃圾收集在这里不是问题

计时器又是同一个问题:它们都是对象引用。

嘿,我会的

如果线程被启动,它将不会被垃圾收集,因为它被包含线程引用

如果已经完成或尚未启动,它将被垃圾收集

原因是,当启动线程对象时,它会被添加到当前的
ThreadGroup
(引擎盖下有点复杂:)。当它完成时,它会自动删除。

嘿,我会的

如果线程被启动,它将不会被垃圾收集,因为它被包含线程引用

如果已经完成或尚未启动,它将被垃圾收集


原因是,当启动线程对象时,它会被添加到当前的
线程组中(在引擎盖下有点复杂:)。当它完成时,它会自动被删除。

正在运行的线程被认为是所谓的垃圾收集根。任何根目录或可以(间接)从根目录引用的内容都不会被垃圾收集。当垃圾收集器确定对象是否“可访问”时,它总是使用垃圾收集器根集作为参考点来执行此操作。

正在运行的线程被视为所谓的垃圾收集根。任何根目录或可以(间接)从根目录引用的内容都不会被垃圾收集。当垃圾收集器确定对象是否“可访问”时,它总是使用垃圾收集器根集作为参考点