這是我的問題:我有一個應用程序在本地啓動模擬服務器。這個操作的輸出被重定向到一個日誌文件,我想在寫這個日誌文件的時候尋找一個特定的模式。阻塞線程 - Java
我已經實現了tail -f模擬(我必須在windows上工作),但是我無法讓兩個線程同時正常工作。
下面是一個示例(主):
server.launch();
patternFinder.start();
的patternFinder擴展Thread,這裏是它的run方法是什麼樣子:
public void run() {
while (true) {
//tail -f implementation
//I'll set a timeout when I can get it
//to work (the pattern is supposed to be found)
}
}
如果我把patternFinder.join()
的start()
後,服務器將暫停執行並等待patternFinder返回(但他不會因爲日誌中沒有寫入任何內容)。但是子線程需要阻塞主線程,因爲我們不希望在找到模式之前執行任何指令(或者達到超時限制)。
任何想法?
(PS:第一篇文章,所以不要猶豫,告訴我,如果我做錯了什麼,或者如果您需要任何更多的細節)
server.launch()是否創建一個新線程?我很困惑在概念上發生了什麼。什麼等待什麼從哪個線程? – 2011-06-08 16:20:32
沒有在主線程中執行server.launch(),但它只是使用Runtime.exec()執行java命令,因此它不會等待服務器啓動。這就是爲什麼我需要一個模式查找器,以確保它正確啓動。 – talnicolas 2011-06-08 16:26:09
那麼爲什麼patternFinder.join()不起作用?據推測,服務器已經在Runtime.exec調用之後運行。主線程阻塞不應該影響服務器。 – 2011-06-08 16:28:33