我是新來的套接字編程,並試圖編寫一個簡單的cmd線聊天應用程序。 現在我使用下面的代碼接受一個連接,然後創建一個新的線程爲相同的,但沒有創建新的線程,並且不再有一個客戶端支持(這是通常當線程不使用時),爲什麼不創建單獨的線程?
public class chatserver extends Thread{
public static Socket client;
public static void main(String a[]) throws Exception{
ServerSocket srv = new ServerSocket(4444);
if((client = srv.accept())!=null){
new newthread(client);
}
}
}
class newthread extends Thread{
private Socket client;
public newthread(Socket client){
super("chatchild");
this.client = client;
start();
}
爲什麼不創建線程?我下文稱的例子在「oracle.com」,其中一個包含了相同的代碼,但我不能找出確切順序會發生什麼以及該片段時從接受連接,並創建線程::
while (listening)
new KKMultiServerThread(serverSocket.accept()).start();
現在這裏聽是布爾VAR坐在真實的,但它永遠不會設定爲f的exaple代碼在代碼中的任何地方都可以。這是如何工作的?
您究竟在跟蹤哪個示例?我覺得很奇怪你的類是從'Thread'派生而不是簡單的_use_'Thread'來完成他們的工作。 – sarnold
還有一件事..不要在構造函數中啓動線程。這是不安全的,因爲一個非完全構造的對象可以被這個線程看到。 –
@sarnold我在下面的例子[鏈接](http://download.oracle.com/javase/tutorial/networking/sockets/),\ – buch11