我正在使用目前使用標準tcp套接字的庫。我的庫的最終用戶將自己註冊爲偵聽器,並且在相關消息進來時需要收到通知。Java:獲取傳入數據包通知
如果我在庫中產生一個工作線程,會出現線程死亡問題,其中我的庫可能會阻止應用程序在所有用戶線程死亡時正常終止。
有沒有一種方法可以在不產生新線程或要求用戶輪詢庫的情況下通知新的傳入tcp數據包?
謝謝!
我正在使用目前使用標準tcp套接字的庫。我的庫的最終用戶將自己註冊爲偵聽器,並且在相關消息進來時需要收到通知。Java:獲取傳入數據包通知
如果我在庫中產生一個工作線程,會出現線程死亡問題,其中我的庫可能會阻止應用程序在所有用戶線程死亡時正常終止。
有沒有一種方法可以在不產生新線程或要求用戶輪詢庫的情況下通知新的傳入tcp數據包?
謝謝!
將工作線程註冊爲「守護進程」以告訴JVM它不必等待線程退出。
http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#setDaemon(boolean)
我不知道插座部分,但如果當你產卵線程將其標記爲守護線程(setDaemon(真)),那麼它不會停止應用程序退出。
您可以使用從套接字讀取數據的線程。如果工作是CPU限制的,則通過發射另一個線程來派發事件,您將獲得很少的收益。另一方面,如果你正在構建一個庫,當你調用監聽器的方法時,你將不能控制用戶會做什麼,所以我建議你使用一個內部執行器並給你的庫像terminate()這樣的方法。調用監聽器的方法將被委託給一個可運行的,你將提交給Executor(可能是一個newSingleThreadExecutor,newCachedThreadPool或任何你認爲最適合的東西)。
這樣,用戶知道他們必須調用init()和terminate() - init()會初始化執行程序,terminate()會關閉關閉它。這使您可以在自己的庫中擁有自己的線程,並防止它們停止關閉主應用程序
看看this,可能會讓您更好地瞭解我在說什麼。