在我的代码我正在使用
Thread.currentThread().sleep(sleepTime);
在代码的主(非Thread对象)部分.
它似乎工作正常,但我担心可能会有一些隐藏的陷阱,以后会在我的屁股中咬我.
有没有更好的方法让你的主要过程坐一会儿?或者这是规定的方法?
编辑:
回答为什么我这样做...
我有一个通过HTTP或FTP连接到远程主机并执行操作的进程.
换一种说法...
东西...
连接到远程...
做远程连接...
密切联系......
更多东西...
必要时重复.
我发现,在非常罕见的情况下,连接只会进入la la land.它不会失败,它不会抛出任何异常,它就会消失.并且它是阻塞的,因此没有设置计时器的内联方式.
所以,我的解决方案就是这样做......
东西...
启动带有连接的新线程...
在MAIN进程中(而不是在生成的线程中)使用计时器进入无限循环并等待其中任何一个
a)连接线程完成其任务并设置一些标志为"完成"
要么
b)等待一段预设的时间,如果连接线程没有报告它已完成,则将其终止并继续.
在主要过程中,我打算睡一段时间,醒来,看看MAX_WAIT_TIME是否已经过期.如果没有,请回去睡觉再等一下.
它似乎比在标准while循环中更有效(在处理器上),因为这会干扰连接线程做它需要做的事情.
我想我的问题确实是......这种方法有什么不安全的地方.我从答案中看到,鉴于我正在做的事情,看起来没有.也许我应该问是否有更标准化的方法?
你在写什么样的应用程序?这很少是一个好主意,如果您正在编写客户端GUI ,这是一个特别糟糕的主意 - 当线程处于休眠状态时,它将无法响应.
如果你能给出更多的指示,你需要暂停和你正在编写的应用程序类型,这将有所帮助.
另一件事 - 你的电话应该是:
Thread.sleep(sleepTime);
通过调用它currentThread()
使它看起来像是一个实例方法,但它不是 - 它只是一个普通的静态方法.你不能让任何其他线程睡觉.
您应该看看您的IDE是否有选项可以通过引用将静态方法调用为警告或错误 - 这会导致误导性代码(如下所示).