假设我有一个名为“Car”的类,并且在该类中有一个持续运行的计时器。如果我设置car=null;
它会删除计时器和其中的任何其他对象吗?
我问这个,因为我曾经有一个有一个会创建对象的计时器的类,如果对象离开了屏幕(它们移动了),它们就会被删除。然而,似乎我没有正确删除它们,导致计算机处理大量物体,导致延迟和滞后。但即使在我设置了具有计时器的容器类并将其中的其他对象处理为null之后,滞后仍然存在,并且会继续变得越来越糟,直到它看起来被冻结。
答案 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();或者你用什么来获得时间。基本上说它是彼此独立的。
这是一个快速回复,所以希望它能回答你的问题