Thread.sleep 与定时器

Posted

技术标签:

【中文标题】Thread.sleep 与定时器【英文标题】:Thread.sleep vs Timers 【发布时间】: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。你收到了很多关于如何改进你的问题的反馈,但是你选择来“反击”。当您来到一个新地方时,您首先要了解通常遵循的规则,而不是期望每个人都会按照您想要的方式做您想做的事。这里的人真的很乐于助人,只是遵守规则:-) 【参考方案1】:

Thread.sleep 停止所有处理,那么如果你在其中有一个循环怎么办,如果这个循环正在比较相同的对象怎么办?它会继续创建这个循环的新实例吗?如果它做了最终结果是什么,比如说它在那个循环中处理一些繁重的指令?

不,不会,您需要start() 一个新线程。 Thread.sleep() 停止当前线程,但如果您在自己的线程中运行它,那么它不会停止主线程和您可以在自己的线程中运行的每个任务,但它们可以在时间滴答后启动。

【讨论】:

我说的是真的计时器 但我说的是你的问题。 好的,对不起,让我发布一个例子来说明我的意思 哦,对不起,我去解决这个问题,我有点赶时间。 不,我没有,我正在使用当前线程,不需要那个

以上是关于Thread.sleep 与定时器的主要内容,如果未能解决你的问题,请参考以下文章

c#中怎样建立定时器?用以替代thread.sleep(),克服sleep延时不精确的问题。

当 Java 中有 Thread.sleep 时,计时器不会停止

TimerTask vs Thread.sleep vs Handler postDelayed - 每N毫秒调用一次函数最准确?

更改操作系统日期和时间后线程休眠

定时器计划如何工作?

Android:Thread.sleep 没有结束