3
我正在寫一個服務器程序,需要通過java.util.Scanner
類請求用戶輸入時,將信息(如客戶端連接或斷開連接)打印到控制檯。用戶輸入將是諸如「退出」的命令。從掃描儀獲取用戶輸入時打印到控制檯
有沒有辦法等待用戶輸入,同時仍然使用System.out.println()
打印信息?如果我不能這樣做Scanner
和System.out.println()
是否有替代?
我正在寫一個服務器程序,需要通過java.util.Scanner
類請求用戶輸入時,將信息(如客戶端連接或斷開連接)打印到控制檯。用戶輸入將是諸如「退出」的命令。從掃描儀獲取用戶輸入時打印到控制檯
有沒有辦法等待用戶輸入,同時仍然使用System.out.println()
打印信息?如果我不能這樣做Scanner
和System.out.println()
是否有替代?
您需要將處理與接受新連接分開。
下面是一個簡單的(且有些做作)例如
private static final class Handler implements Runnable {
private final Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//do stuff.
}
}
public static void main(String[] args) throws IOException {
final ServerSocket serverSocket = new ServerSocket();
final ExecutorService handlerExecutor = Executors.newFixedThreadPool(4);
while (true) {
final Socket socket = serverSocket.accept();
System.out.println("Got new connection, passing off to handler");
handlerExecutor.execute(new Handler(socket));
}
}
所以僅與接受連接和其傳遞到其調用Handler
的run
方法handlerExecutor
主Thread
交易。這意味着服務器可以繼續等待新連接,並在工作繼續進行時分配給他們的分配的Handler
中的各個連接。
使用兩個線程? – Keppil 2013-05-11 13:43:23
完美運作。謝謝! – jakeprogrammer 2013-05-11 14:02:03