import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* ThreadPool演示
*/
public class TCPServerPool {
public static void main(String args[]) throws IOException {
// ensure the parameter is right!
if (args.length != 2) {
throw new IllegalArgumentException("Parameter(s):<port> <ThreadSize>");
}
int server_port = Integer.parseInt(args[0]);
int threadpool_size = Integer.parseInt(args[1]);
// create a server socket to accept client connection requests
final ServerSocket serSock = new ServerSocket(server_port);
final Logger logger = Logger.getLogger("thredPoolLog");
Executor executor = Executors.newFixedThreadPool(5);
// spawn a fixed number of threds to service clients
for (int i = 0; i < threadpool_size; i++) {
Runnable run = new Runnable() {
public void run() {
while (true) {
try {
Socket clientSock = serSock.accept();
/**
* 把它交给一个独立的handler处理 你可以将handler定义为一个独立的线程(注意性能)
* 或者定义为一个静态方法(注意并发的同步问题)。
*/
} catch (IOException e) {
logger.log(Level.WARNING, "Client accept failed", e);
}
}
}
};
Thread t = new Thread(run, "Thread-" + i);
//t.start();
executor.execute(t);
//logger.info("create and start a thread named " + t.getName());
}
}
}