2013-01-25 18 views
-1

比方說,我有System.inJava線程System.in我如何「等控制檯命令」

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

result = br.readLine(); 
       while (!result.isEmpty()) { 
        if (result.equalsIgnoreCase("exit")) { 
         userStr="exit"; 
         System.exit(0); 
        } else if (result.equalsIgnoreCase("list")) { 
         userStr="list"; 
        } else if (result.equalsIgnoreCase("kill")) { 
         userStr="kill"; 
        } else if (result.equalsIgnoreCase("help")) { 
         userStr="help"; 
} 

ServerSocket socketListener = new ServerSocket(port); 
while (true) { 
       Socket client = socketListener.accept(); 
       new ServerThread(client,userStr); //pass userStr to Thread    
      } 

我不明白我如何「等控制檯命令「並將它們傳遞給活動的線程。我需要接受()客戶端,將它們傳遞給線程。例如,如果我在服務器控制檯中輸入命令, 「kill用戶名」(斷開連接用戶)或「列表」(用戶名列表) 我的服務器應該傳遞命令給線程。

p/s我需要管理服務器,通過輸入控制檯命令進行管理。

+0

查看[java.util.concurrent]中的隊列實現(http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary。 html) – McDowell

+1

我還是不明白你的問題。標題沒有告訴我什麼,雖然我明白你想要做什麼,但我仍然不明白你想問什麼。你解決這個問題有什麼問題?顯然你知道線程,所以「等待控制檯命令」不應該是一個問題? – junix

+1

我試圖更新這個問題,如果我犯了一個錯誤,請隨時更新這個問題。對於未來的問題,你應該真的試着在你的問題上付出一些努力。請記住,我們沒有得到報酬來回答你的問題。這完全是自願的,人們在百忙之中抽出時間幫助你。 http://stackoverflow.com/review/ – eandersson

回答

2

由於簡單的解決方案可以阻止你線程,直到它會收到一個任務來執行:

class Task implements Runnable { 
    AtomicReference<String> atomicReference = new AtomicReference<String>(null); 

    @Override 
    public void run() { 
     while (true) { 
      String command = atomicReference.getAndSet(null); 
      if (command != null) { 
       //do staff with command 
      } 
     } 
    } 

    public void executeCommand(String command) { 
     atomicReference.set(command); 
    } 
} 

使用方法如下:

ServerSocket socketListener = new ServerSocket(port); 
Task task = new Task(); 
new Thread(task).start(); 

while (true) { 
      Socket client = socketListener.accept(); 
      task.executeCommand(userCommand); 
     } 

但如果你需要更復雜的解決方案,我將建議您可以閱讀有關Java Concurrency軟件包:

Avesome book about that

Good article

+1

thx回覆,它確實幫了我 – user1992835

相關問題