2012-10-30 46 views
-1

我在LinuxOS上的Java中做了一個小小的客戶端服務器應用程序,服務器從客戶端接收不同的命令並通過啓動不同的線程來處理它們。每個命令都有一個特定的線程。線程啓動後的命令不會被執行

我的主程序啓動一個線程,它響應不同的命令,並由一個無限循環簡化。還沒有退出循環。該線程打印到主程序啓動的終端,但「.start()」之後的命令未執行。

ServerSend servSend = new ServerSend(arg); 
System.out.println("1"); 
servSend.start(); 
System.out.println("2");` 

因此,「2」永遠不會被打印,而線程內的一些「System.out.println()」工作。有人知道爲什麼嗎?

+2

什麼是'ServerSend'? 'start()'返回嗎? – TC1

+6

你是否有機會擴展'Thread'並重載'start()'? –

+0

@TomaszNurkiewicz另一種濫用線程的方式我沒有想到;) –

回答

1

如果你想生成一個新的線程,我認爲ServerSend實現java.lang.Runnable或擴展java.lang.Thread在這種情況下,你應該覆蓋public void run()方法,start()方法。

即:

public class ServerSend implements java.lang.Runnable { 
    public Thread thread; 
    public ServerSend(arg) { 
     //constructor 
     thread = new Thread(this); 
    } 
    public void run() { 
     //the contents of this method are executed in their own thread 
    } 
} 

再搭配使用;

ServerSend s = new ServerSend(arg); 
s.thread.start(); 

thread公衆獲得允許你做這樣的事情;

s.thread.interrupt(); 

這是我的優選方法(採用Runnable)其他人則傾向於延伸Thread。這個回答幾乎總結了我的想法:https://stackoverflow.com/a/541506/980520

+0

他沒有寫他重寫開始而不是跑。 –

+0

它的作品,非常感謝你! – user1786193