我正在用套接字在Java上構建客戶端 - 服務器應用程序。據我所知,爲每個連接的客戶端創建一個線程太昂貴了。相反,我們可以使用ThreadPool Executor
。正如在併發documentation中所說的,我們可以創建一個固定大小的線程池。ThreadPool執行程序和大量客戶端同時連接
class NetworkService implements Runnable {
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 run() { // run the service
try {
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}
而且看起來我們最多隻有poolSize
線程在每個時間點運行。但是如果我們需要維護大於poolSize
的連接數量呢?它是如何工作的?
它不會。您的客戶將阻塞,直到線程可用。 – atamanroman
增加'poolSize'? –
@ScottHunter我需要保持1000個客戶端同時連接。這是否意味着我將不得不創建1000個線程? –