【发布时间】:2015-11-18 06:01:27
【问题描述】:
所以在我的研究中,我发现了使用计时器执行指令和执行指令然后让线程休眠之间的主要区别。
观察以下代码
public class StkFlow {
public void event(ActionEvent e){
//do some stuff
}
public static void main (String [] args){
Timer tick=new Timer (200, event);
tick.start ();
}
}
与
public class StkFlow {
public static void main (String[] args){
while (/*Condition*/){
//Do some stuff
Thread.sleep (200);
}
}
第一段代码使用定时器,每 200 毫秒执行一些代码,第二段代码执行一些代码,使线程休眠 200 毫秒。不同之处在于定时器已经为你迭代并且不会暂停线程与停止所有处理的 Thread.sleep 不同(这里的主题是计时器)所以如果你在其中有一个循环怎么办,如果这个循环正在比较相同的对象怎么办?它会继续创建这个循环的新实例吗?如果它做了最终结果是什么,比如说它在那个循环中处理一些繁重的指令?
E.G
public class StkFlow {
public void event(ActionEvent e){
while (0==0){
//do some heavy duty stuff
}
}
public static void main (String [] args){
Timer tick=new Timer (200, event);
tick.start ();
}
}
【问题讨论】:
-
叹息。伙计们,这至少可以说是没有建设性的。 OP:JB Nizet 是对的 - 要了解
Timer如何处理长处理,您只需阅读Timer的文档。 -
对每一个在你的问题上遇到/回答的人都咄咄逼人、粗鲁无礼是一种简单的方式来赢得自己的反对票。你想回答你的问题还是想争论和争吵?好像是后者。
-
@DanjahSoftProgrammer 请阅读help center 中的 SO 规则。没有机器人和死气沉沉的,会让你发布问题,从而产生更有建设性的回应。
-
是的,你是这一切的始作俑者。 cmets 可能觉得迂腐和毫无意义,但这些细节在编码时很重要并且这些人是完全正确的。你不只是解释情况和解决你的问题,而是开始辱骂和发脾气。这不是很有建设性。当您不向我们展示您正在使用的实际代码时,很难提供帮助,尤其是当您的代码甚至无法编译时(并且您声称的问题是运行时问题,而不是编译时问题)。
-
@DanjahSoftProgrammer 这不是“欺凌”。人们有权投票,具体取决于他们认为问题的有用程度。不,你永远不能低于 0。你收到了很多关于如何改进你的问题的反馈,但是你选择来“反击”。当您来到一个新地方时,您首先要了解通常遵循的规则,而不是期望每个人都会按照您想要的方式做您想做的事。这里的人真的很乐于助人,只是遵守规则:-)
标签: java multithreading timer