耐心宣言: -
long patience= 1000 * 60 * 60;
上述行宣佈耐心是1小時的默認值。
以上耐心值僅在命令行參數不存在時使用。
if (args.length > 0)
{
try{
patience= Long.parseLong(args[0]);
}
在上面的代碼中,如果命令行參數存在,則將其分配給耐心。
a)命令行參數以字符串數組的形式傳遞,即參數,所以您檢查數組的長度,如果它的長度大於1,這意味着傳遞了一些參數。
b)因爲命令行參數是一個字符串值,所以您通過使用parseLong(args[0])
將其轉換爲long,其中您正在解析數組參數的第一個元素。
c)如果傳遞的參數不能被解析爲一個長整型值,那麼就是拋出NumberFormatException
如果您通過abc,則無法將其解析爲長整型值。
Tutorial for passing command line argument to java program。
記住Thread類sleep和join方法需要幾毫秒作爲參數,因此您作爲命令行參數提供的值需要以毫秒爲單位。 因此,更好地使用下面的代碼: -
patience = Long.parseLong(args[0]) * 1000; //convert seconds to milliseconds
驗證: -
兩種方式,通過它可以驗證耐心
1)首先通過耐心< 4秒的較小值,說2秒。約2秒後,您可以立即看到主線程的中斷。通過這種方法獲得以下的輸出:
Output:-
main: Starting MessageLoop thread
main: Waiting for MessageLoop thread to finish
main: Still waiting...
main: Still waiting...
main: Tired of waiting!
Thread-0: I wasn't done!
main: Finally!
2)你可以把消息循環線程1個多小時睡覺,如果你使用的是耐心的默認值。請參閱下面的代碼: -
Thread t = new Thread(new MessageLoop());
Thread.sleep(patience+10000l);
t.start();
您的「懷疑是在聲明和驗證...」。你懷疑什麼?你是什麼*問題*? – Andreas
「如何使用args.length來設置最大時間限制」:事實並非如此。你的問題沒有意義。 – EJP