[問題] 關閉serverSocket.accept()的Thread

看板AndroidDev作者 (好人超)時間13年前 (2011/07/19 22:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 java 看板 #1E9Kow2V ] 作者: james732 (好人超) 站內: java 標題: [問題] 關閉serverSocket.accept()的Thread 時間: Tue Jul 19 17:21:59 2011 如果我有一個新執行緒,裡面有個無窮迴圈執行 serverSocket.accept() private class ListenThread extends Thread { ServerSocket serverSocket; public ListenThread(ServerSocket s) { serverSocket = s; } @Override public void run() { try { while (true) { Socket s = serverSocket.accept(); new JobThread(s).start(); } } catch (IOException e) { } } } public static void Main(String[] s) { Thread t = new ListenThread(new ServerSocket(5566)); t.start(); // 做一些其他的工作 // 我想在這裡結束執行緒 t, 並且關閉 ServerSocket // 繼續做一些其他的工作 } 我想問的是,當這個執行緒在 accept() 等待 client 的連線時 要怎麼樣能夠結束這個執行緒,同時關閉這個 ServerSocket 呢? 另外分享一件蠢事... 我最近把程式寫成這樣 new Thread() { @Override public void run() { // 一些耗時的工作 } }.run(); 然後很疑惑為什麼我會一直收到ANR(Android is Not Responding) 還在想說Android的thread是不是哪裡不一樣... 之前比較習慣寫這樣 class MyThread extends Thread { ... } main() { MyThread t = new Thread(); t.start(); // 這個時候明明不會寫錯.... } 練習(偷懶)用了一下 Anonymous inner class 就耍笨了... 覺得 override run() 之後接著執行 run() 是一件很順手的事 orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.40

07/19 18:05,
在你的class裡面多做一個public method來做這件事應該
07/19 18:05

07/19 18:15,
前面那樣寫沒問題,因為已經是在另一個thread裡等待 accept
07/19 18:15
我想請教的問題是:要怎麼停止那個 accept() 因為我寫的是 Android service 它會一直擺在背景執行,等待 Client 的連線並且做一些事 直到 Android 系統把我這隻 service 砍掉 而我想在 onDestroy() 被呼叫時,清理掉這隻 Thread 以及關閉 ServerSocket 避免 Service 已經砍掉,但 Thread 還在跑 accept() 的怪異情況 (還是說,因為我的 Service 與 Thread 位於同一個 Process 裡, 在 Service onDestroy() 之後,這隻 Thread 跟 ServerSocket 都會自然被砍掉, 所以不需要費心清理嗎?) ※ 編輯: james732 來自: 114.35.184.77 (07/19 22:19) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.184.77
文章代碼(AID): #1E9PAB1- (AndroidDev)
文章代碼(AID): #1E9PAB1- (AndroidDev)