Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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—将类设置为null是否会消除该类中的所有计时器_Java_Object_Timer - Fatal编程技术网

java—将类设置为null是否会消除该类中的所有计时器

java—将类设置为null是否会消除该类中的所有计时器,java,object,timer,Java,Object,Timer,假设我有一个叫做“Car”的类,在这个类中有一个计时器一直在运行。如果我设置car=null它是否会删除计时器和其中的任何其他对象 我问这个问题,因为我曾经有一个类,它有一个计时器,可以创建对象,如果对象离开屏幕(移动),它们就会被删除。然而,我似乎没有正确地移除它们,导致计算机需要处理大量的对象,这导致了延迟和延迟。但是,即使我将拥有计时器并处理其中其他对象的容器类设置为null,延迟仍然存在,并且将继续变得越来越严重,直到它看起来冻结。否,如果计时器存在并正在运行,它将继续运行。将包含对象的

假设我有一个叫做“Car”的类,在这个类中有一个计时器一直在运行。如果我设置
car=null它是否会删除计时器和其中的任何其他对象


我问这个问题,因为我曾经有一个类,它有一个计时器,可以创建对象,如果对象离开屏幕(移动),它们就会被删除。然而,我似乎没有正确地移除它们,导致计算机需要处理大量的对象,这导致了延迟和延迟。但是,即使我将拥有计时器并处理其中其他对象的容器类设置为null,延迟仍然存在,并且将继续变得越来越严重,直到它看起来冻结。

否,如果计时器存在并正在运行,它将继续运行。将包含对象的变量设置为null不会改变这一点。请注意,测试这一点非常简单,因为大多数调试器都会向您显示正在运行的线程以及变量的状态——因此,请执行此操作,通过调试器运行此操作并亲自查看。一个java.util.Timer或一个javax.swing.Timer(您不会告诉我们哪个)将继续运行,并将使用它自己的线程来运行

你的主要问题是,你需要清理房间,清除你不再需要的活动对象,而你目前的计划可能行不通。为了得到更好的帮助,帮助清理你不想要的东西,你可能不得不问一个更完整的问题,一个有一个能充分向我们展示你的问题的问题

还请注意,您声明:

..将其中的其他对象处理为null


请理解,您永远不能将对象设置为“null”,事实上,这没有任何意义。是的,您可以将引用变量设置为null,但这是完全不同的,这种差异很重要。这里重要的是参考资料。

如果我没有弄错的话

你有一门课叫Car so

public class Car {}
车内有一个基于线程的功能计时器吗

public class Car {

     public void timer() { // thread stuff to increment time }

}
若你们调用car,然后通过声明它为null来释放它,我的理解是类应该为null。除非您使用另一个名为Timer的类,并且它有自己的线程,该线程由您调用的静态函数链接,否则它应该继续运行,因为Car类将只使用getTime();或者你用什么来打发时间。基本上说它是相互独立的


这是一个快速的回答,希望它能回答您的问题,答案是否定的,假设您提到的“timer”是java.util.timer

创建计时器后,线程将启动,并将继续运行,直到被取消或JVM停止。因此,您需要显式调用timer.cancel()以在“汽车”不再使用时停止计时器。

简短回答是否

长答覆: 分配
car=null基本上移除汽车对象和保存该对象的内存和平之间的挂钩。如果没有其他对象链接到该内存,那么下次GC运行时可能会将其清除

我有一个叫做“汽车”的班级,在这个班级里有一个计时器一直在运行

所以计时器是一个静态变量或属于类的方法

如果您想删除这个类中的计时器,您必须明确地停止它,就像停止运行计时器的线程一样。或者,如果您在java上运行一个可取消的任务,您可以执行timer.cancel(true)


如果您有一个可运行的类,它的线程睡眠在自己的线程上运行(这就是我创建计时器的方式),那么您可以创建一个方法来取消(杀死)计时器(线程)

将null赋值给变量(您不能“声明”类或对象null,所以请不要这样说)不会释放任何东西。我要说的是,如果您通过为对象分配内存来执行活动,然后尝试通过调用null来丢弃它,则不会立即删除它。从来没有说过会立即清除/释放内存,因为他可能会再次得到它,“通过调用null丢弃它”对对象没有任何意义。