我以前从未深入思考过Thread.Sleep的使用,直到我下载了最新版本的Netbeans。现在Netbeans警告你不要使用Thread.Sleep。因此,我对这个话题进行了一些研究,并发现有人声称,只有在调试/测试目的时才需要使用Thread.Sleep,如果你在其他任何时间使用它,就是编写不良代码。
那么我的问题是,在以下情况下如何避免使用Thread.Sleep。
我编写了一个与另一个应用程序进行交互的服务器应用程序。该服务器有两个线程:
1. 处理通过套接字传输的数据并发送其他信息或纯粹的确认。 2. 这是主线程。启动套接字线程后,进入无限循环。在此while循环中,我检查套接字线程是否仍处于活动状态,并且用户是否通过TrayIcon界面请求退出应用程序。然后我睡眠并继续这个while循环。
对于这个应用程序,TrayIcon是唯一的UI。
以下是我参考的代码片段:
那么我的问题是,在以下情况下如何避免使用Thread.Sleep。
我编写了一个与另一个应用程序进行交互的服务器应用程序。该服务器有两个线程:
1. 处理通过套接字传输的数据并发送其他信息或纯粹的确认。 2. 这是主线程。启动套接字线程后,进入无限循环。在此while循环中,我检查套接字线程是否仍处于活动状态,并且用户是否通过TrayIcon界面请求退出应用程序。然后我睡眠并继续这个while循环。
对于这个应用程序,TrayIcon是唯一的UI。
以下是我参考的代码片段:
// continues running as long as the exitth file is not present and
// the tray icon is not in a safe to exit status.
while(doNotExit())
{
if (getPrimaryThread() == null || !getPrimaryThread().isAlive())
resetsThreadAndSocket();
try
{
// check to see if the socket threads are still active, if not create new ones.
if ((getPrimaryThread() == null || !getPrimaryThread().isAlive()))
createSocketThread();
// check right before sleeping that the user does not want to exit.
if(getTrayIcon().isExiting())
break;
// puts the main Thread to sleep for 3 seconds
Thread.sleep(3000);
}
catch(SQLException ex)
{
_log.error(ex.getMessage(), ex);
restartDatabase();
}
}