[問題] 關閉serverSocket.accept()的Thread
※ [本文轉錄自 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,
07/19 18:05
→
07/19 18:15,
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
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章