1
我試圖創建多線程服務器,它將接收來自不同客戶端的消息,然後發回消息。我正在使用執行服務器來管理 線程的創建。但我不確定我是否願意這樣做,我以前沒有使用過執行者服務?而且我對這行有問題 executor.execute(new Handler(client));
處理程序是抽象的,無法初始化?如何解決它?執行服務解決綁定端口問題?它會讓客戶端的請求排隊嗎? THX提前tcp多線程服務器java
package serverx;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Handler;
public class ServerX {
public static void main(String [] args){
ExecutorService executor = Executors.newFixedThreadPool(30);
ServerSocket server;
try{
server= new ServerSocket(5555);
System.out.println ("Server started!");
while(true) {
try{
Socket client = server.accept();
//Thread t= new Thread (new Handler(client));
//t.start();
executor.execute(new Handler(client));
}
catch (IOException e) {
e.printStackTrace();
}
}
}catch (IOException el){
el.printStackTrace();
}
}
}
處理程序:
public class Handler implements Runnable{
private Socket client;
public Handler(Socket client){
this.client=client;}
public void run(){
//............
}
}
thx很多,我把它作爲內部類(所以我刪除公共類Handler實現Runnable),現在它的工作。所以服務器只會在30個線程之後停止,但是如果一段時間後它不能收到任何線程,我能否停止工作?如果它是可能的?或者我只能改變這個值「30」 – chajka
@chajka不客氣,你也可以接受我的答案感謝。 對於你的其他問題,其實我以前沒做過。當你啓動你的服務器時,它不會停止,直到你打破它。也許你可以考慮一個休息條件(在while循環中)滿足你的需求。 – oko
完成,我不知道這個機會) – chajka