2010-09-24 34 views
0

我正在設計一個使用dns查找類的java系統。等待dns查找時使用多線程或觀察者模式?

我的問題是,在調用類的dnsLookup()時,是在新線程中執行還是使用觀察者模式,並讓dns類在完成時告訴我。

這不是一個問題,只要查找幾乎立即返回一個值,但當它需要幾秒鐘(當它沒有得到響應)時,我不想在等待時凍結GUI。

因此,新的線程或觀察者。欣賞一些關於主題的良好鏈接。

由於事先丹尼斯 -

回答

3

您將不得不使用觀察者模式和多個線程。沒有辦法讓DNS在同一個線程中調用回調方法。

+1

+1。我們有一個應用程序進行了大量的DNS查詢,特別是在啓動時。我們使用觀察者模式並讓線程池處理查找。 – volley 2010-09-24 12:25:55

0

你的GUI是一個事件驅動系統,異步通知都不錯。另一方面,如果使用同步(阻止)網絡調用,則執行網絡I/O(特別是如果它只是單個DNS查找)要容易得多。

因此,我傾向於選擇單獨的線程選項,但是當完成後讓該線程通知主要的GUI線程。

0

由於它是一個正在進行呼叫的GUI,我認爲最好是將呼叫卸載到不同的字符串。事實上,你要確保你沒有使用AWT線程進行阻止GUI刷新的調用。我會建議使用像一個ExecutorService東西以執行命令,然後在返回,使用SwingUtilities並調用invokeLater(Runnable doRun)方法來更新與響應的GUI。