我正在将一些Javascript代码翻译成Java,并且需要了解如何在Java中执行超时。我如何将以下内容翻译成Java?Java等效的JavaScript超时函数
var x = setTimeout(function(){ ... }, 2000);
clearTimeout(x);
我正在将一些Javascript代码翻译成Java,并且需要了解如何在Java中执行超时。我如何将以下内容翻译成Java?Java等效的JavaScript超时函数
var x = setTimeout(function(){ ... }, 2000);
clearTimeout(x);
创建启动一个新的Thread
。如果你需要延迟执行,你可以使用sleep()
无论如何,它基本上是不同的,在JS中你没有'主线程'(JS由浏览器线程运行),而在Java中你有它。所以,如果你想要做的是在指定的时间单独调用一个函数,你只需创建一个线程,并在该线程中创建一个包含睡眠和逻辑的循环(并将该线程标记为守护进程)。
创建新线程是否会对性能造成重大影响?我只想在500毫秒后设置一个变量,似乎有点矫枉过正产生一个新的线程,但如果没有性能问题,我可以。 – 2012-02-01 12:05:51
我相信通常它不轻,但它取决于环境,在J2EE中通常有一个池,所以大多数时候你不创建它们,但重用一些,在J2SE中我不确定(我相信没有这样的池)。另外,如果你在主线程中(因此'wait'冻结GUI)或者在一个辅助线程中,它是不一样的。当然,你做了多少次。另外,不同的OS/VM实现可能意味着创建线程的不同处罚。 – SJuan76 2012-02-01 12:17:17
谢谢,很高兴知道。我想我会改变我的代码模式来解决这个问题,从你的回答来看,Java计时器似乎不适合小任务,如果可以避免的话。 – 2012-02-01 12:29:48
创建一个线程并粘贴您的业务逻辑(您想在其中等待)。然后使用Thread.sleep(2000);
。然而,它取决于你的需求,你想要用你的java代码做什么。你也可以使用public interface Lock
这样的:
Lock lock = ...;
if (lock.tryLock(50L, TimeUnit.SECONDS)) ...
试试用java.util.Timer中
您可以安排任务时,在规定的时间结束或进入周期性间隔。使用
myTimer.schedule(tt,2000);
其中tt是来自java.util.TimerTask的TimerTask对象(您必须实现run()方法,它将对应于JavaScript中的“function(){...}”)。
scheduleAtFixedRate定期任务 – cabreracanal 2012-02-01 12:39:21
这是否创建一个新的线程?并有没有一种等效的方式来取消js'clearTimeout()'? – 2012-02-01 12:56:40
是的。您可以使用Timer类的cancel()方法取消它。 – cabreracanal 2012-02-01 13:23:58
您将不得不使用定时器线程进行此类工作。 – 2012-02-01 12:01:11
也许这样? http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html – 2012-02-01 12:03:40