当前位置:  开发笔记 > 编程语言 > 正文

在我的主代码中使用Thread.currentThread.sleep()有什么危险吗?

如何解决《在我的主代码中使用Thread.currentThread.sleep()有什么危险吗?》经验,为你挑选了1个好方法。

在我的代码我正在使用

Thread.currentThread().sleep(sleepTime);

在代码的主(非Thread对象)部分.

它似乎工作正常,但我担心可能会有一些隐藏的陷阱,以后会在我的屁股中咬我.

有没有更好的方法让你的主要过程坐一会儿?或者这是规定的方法?

编辑:

回答为什么我这样做...

我有一个通过HTTP或FTP连接到远程主机并执行操作的进程.

换一种说法...

东西...

连接到远程...

做远程连接...

密切联系......

更多东西...

必要时重复.

我发现,在非常罕见的情况下,连接只会进入la la land.它不会失败,它不会抛出任何异常,它就会消失.并且它是阻塞的,因此没有设置计时器的内联方式.

所以,我的解决方案就是这样做......

东西...

启动带有连接的新线程...

在MAIN进程中(而不是在生成的线程中)使用计时器进入无限循环并等待其中任何一个

a)连接线程完成其任务并设置一些标志为"完成"

要么

b)等待一段预设的时间,如果连接线程没有报告它已完成,则将其终止并继续.

在主要过程中,我打算睡一段时间,醒来,看看MAX_WAIT_TIME是否已经过期.如果没有,请回去睡觉再等一下.

它似乎比在标准while循环中更有效(在处理器上),因为这会干扰连接线程做它需要做的事情.

我想我的问题确实是......这种方法有什么不安全的地方.我从答案中看到,鉴于我正在做的事情,看起来没有.也许我应该问是否有更标准化的方法?



1> Jon Skeet..:

你在写什么样的应用程序?这很少是一个好主意,如果您正在编写客户端GUI ,这是一个特别糟糕的主意 - 当线程处于休眠状态时,它将无法响应.

如果你能给出更多的指示,你需要暂停和你正在编写的应用程序类型,这将有所帮助.

另一件事 - 你的电话应该是:

Thread.sleep(sleepTime);

通过调用它currentThread()使它看起来像是一个实例方法,但它不是 - 它只是一个普通的静态方法.你不能让任何其他线程睡觉.

您应该看看您的IDE是否有选项可以通过引用将静态方法调用为警告或错误 - 这会导致误导性代码(如下所示).

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有