java 1.5 捕獲線程異常
Executor
提供了管理終止的方法,以及可為跟蹤一個(gè)或多個(gè)異步任務(wù)執(zhí)行狀況而生成 Future
的方法。
可以關(guān)閉 ExecutorService,這將導(dǎo)致其停止接受新任務(wù)。關(guān)閉后,執(zhí)行程序?qū)⒆詈蠼K止,這時(shí)沒有任務(wù)在執(zhí)行,也沒有任務(wù)在等待執(zhí)行,并且無法提交新任務(wù)。
通過創(chuàng)建并返回一個(gè)可用于取消執(zhí)行和/或等待完成的 Future
,方法 submit 擴(kuò)展了基本方法 Executor.execute(java.lang.Runnable)
。方法 invokeAny 和 invokeAll 是批量執(zhí)行的最常用形式,它們執(zhí)行任務(wù)集合,然后等待至少一個(gè),或全部任務(wù)完成(可使用 ExecutorCompletionService
類來編寫這些方法的自定義變體)。
Executors
類提供了用于此包中所提供的執(zhí)行程序服務(wù)的工廠方法。
用法示例
下面給出了一個(gè)網(wǎng)絡(luò)服務(wù)的簡(jiǎn)單結(jié)構(gòu),這里線程池中的線程作為傳入的請(qǐng)求。它使用了預(yù)先配置的Executors.newFixedThreadPool(int)
工廠方法:
class NetworkService {
private final ServerSocket serverSocket;
private final ExecutorService pool;
public NetworkService(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
}
public void serve() {
try {
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}
class Handler implements Runnable {
private final Socket socket;
Handler(Socket socket) { this.socket = socket; }
public void run() {
// read and service request
}
}
posted on 2008-11-05 15:46 lqx 閱讀(484) 評(píng)論(0) 編輯 收藏 所屬分類: java