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

看板java作者 (好人超)時間12年前 (2011/07/19 17:22), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/2 (看更多)
如果我有一個新執行緒,裡面有個無窮迴圈執行 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, , 1F
在你的class裡面多做一個public method來做這件事應該
07/19 18:05, 1F

07/19 18:15, , 2F
前面那樣寫沒問題,因為已經是在另一個thread裡等待 accept
07/19 18:15, 2F
我想請教的問題是:要怎麼停止那個 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) ※ james732:轉錄至看板 AndroidDev 07/19 22:19
文章代碼(AID): #1E9Kow2V (java)
文章代碼(AID): #1E9Kow2V (java)