Java中与JavaScript Timeout函数相对应的是什么?

3

我正在将一些Javascript代码翻译成Java,并需要知道如何在Java中进行超时处理。以下内容应该如何翻译成Java?

var x = setTimeout(function(){ ... }, 2000);
clearTimeout(x);

1
你需要使用计时器线程来完成这种类型的工作。 - Buhake Sindi
也许是这个?http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html - Shadow The Spring Wizard
3个回答

4

尝试使用java.util.Timer

您可以在指定时间结束时或周期性间隔内安排任务。 使用

myTimer.schedule(tt, 2000);

其中tt是来自java.util.TimerTask的TimerTask对象(您必须实现run()方法,该方法将对应于javascript中的“function(){ ... }”)。


scheduleAtFixedRate 用于定期任务。 - cabreracanal
这会创建一个新的线程吗?是否有与JS的 clearTimeout() 类似的取消方式? - Billy Moon
是的,可以使用Timer类中的cancel()方法来取消它。 - cabreracanal

0

创建并启动一个新的Thread。如果您需要执行延迟,可以使用sleep()

无论如何,它基本上是不同的,在JS中你没有一个“主线程”(JS是由浏览器线程运行的),而在Java中你有它。因此,如果你想要在指定的时间分别调用一个函数,你只需创建一个线程,在这个线程中使用睡眠和逻辑(并将线程标记为守护进程)。


创建新线程会对性能造成显著影响吗?我只想在500毫秒后设置一个变量,似乎开启新线程有点过度,但如果没有性能问题,我可以接受。 - Billy Moon
通常情况下,线程的创建并不轻松,但这取决于环境。在 J2EE 中通常有一个池,因此大多数情况下你不需要创建新线程而是重用一些线程,在 J2SE 中我不确定(我认为没有这样的线程池)。此外,如果你在主线程中(wait 会冻结 GUI)或者在一个辅助线程中,情况也是不同的。当然还有你执行这个操作的次数。同时,不同的操作系统 / 虚拟机实现可能意味着创建线程会产生不同的代价。 - SJuan76
谢谢,知道了。我想我会改变我的代码模式来解决这个问题,从你的回答来看,如果可以避免的话,Java计时器不适用于小任务。 - Billy Moon

0
创建一个线程并粘贴您的业务逻辑(您想要等待的部分)。然后使用Thread.sleep(2000);。但是,这取决于您的需求,您想要对Java代码做什么。此外,您还可以像这样使用public interface Lock
 Lock lock = ...;
  if ( lock.tryLock(50L, TimeUnit.SECONDS) ) ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接