java - 设置一个等于null的类去除该类中的所有计时器

时间:2016-06-20 02:38:32

标签: java object timer

假设我有一个名为“Car”的类,并且在该类中有一个持续运行的计时器。如果我设置car=null;它会删除计时器和其中的任何其他对象吗?

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

4 个答案:

答案 0 :(得分:2)

不,如果计时器存在且正在运行,它将继续运行。将包含对象的变量设置为null不会更改此设置。请注意,测试它很简单,因为大多数调试器会显示正在运行的线程以及变量的状态 - 所以这样做,通过调试器运行并自己查看。 java.util.Timer或javax.swing.Timer(你不告诉我们哪些)将继续运行,并将使用自己的线程来执行此操作

你的主要问题是你需要打扫房屋,摆脱不再需要的活动物品,而你当前的计划可能不会起作用。为了获得更好的帮助,帮助您清理不需要的物品,您可能需要提出一个更完整的问题,一个minimal example program的问题可以完全证明您的问题。

另请注意,您声明:

  

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

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

答案 1 :(得分:0)

答案是否定的,假设"计时器"你提到的是java.util.Timer。

一旦你创建了一个计时器,一个线程就会被启动,并且会一直运行直到被取消或者JVM被停止。所以你需要明确地调用timer.cancel()来停止你的" Car"已不再使用。

答案 2 :(得分:0)

简短的回答是否定的。

答案很长: 分配car = null;几乎删除了汽车对象和保存对象的内存和平之间的钩子。如果没有其他对象具有到该内存的链接,那么下次GC运行时它可以将其清除。

  

我有一个名为" Car"的课程,并且在该课程中有一个持续运行的计时器。

因此,计时器是一个静态变量或属于类的方法。

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

如果你有一个runnable类,其线程休眠在自己的线程上运行(这就是我创建计时器的方法),那么你可以创建一个方法来取消(kill)计时器(线程)..

答案 3 :(得分:-1)

如果我理解这一点

你有一个名为Car的课程

public class Car {}

车内你有一个功能计时器,基于线程?

public class Car {

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

}

如果你打电话给汽车,然后通过声明为空来释放它,我理解该类应为null。除非你使用另一个名为Timer的类并且它有自己的线程,它由你调用的静态函数链接,那么它应该继续自己运行,因为Car类只使用getTime();或者你用什么来获得时间。基本上说它是彼此独立的。

这是一个快速回复,所以希望它能回答你的问题