執行緒在代碼中添加了很多語言,使其更難理解和推理。例如看這段代碼:
public class ConnectionListener implements Runnable {
private Thread thread;
private boolean running;
public void start() {
if (!running) {
thread = new Thread(this);
thread.start();
}
}
public void stop() {
if (running) {
running = false;
thread.interrupt();
}
}
@Override
public void run() {
running = true;
while (running) {
// Do some crap
}
}
}
這個類的全部關注點應該是監聽來自網路的連接請求。但是看看添加了多少行代碼只是為了管理一個執行緒。有沒有辦法讓這段代碼更干凈?!我不想看到thread = new Thread();, 不是執行緒變數,也不想看到任何stop()/start()方法!
我當然知道它ExecutorService是什么……但是如果我想管理一個長期運行的執行緒怎么辦?所謂長時間運行的執行緒,我的意思是生命周期與應用程式的生命周期一樣長的執行緒。
你對我有什么好的解決方案嗎?一種從類中洗掉執行緒創建和管理問題而不使該類擴展另一個類的方法?
uj5u.com熱心網友回復:
我通過使用單執行緒執行器服務解決了這個問題。我也看到了有關的性能差異Plain Thread,ThreadPool以及SingleThreadExecutor- SingleThreadExecutor VS平原線。
使用單執行緒執行器允許我啟動單個執行緒并使用它的Future. 見代碼示例:
public void func(String[] args) {
ExecutorService es = Executors.newSingleThreadExecutor();
Future<?> f = es.submit(Some Runnable);
}
感謝@BasilBourque 在評論中給了我這個解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409610.html
標籤:
下一篇:使用回圈調度運行多個執行緒
