java多线程网络编程
服务器要同时维护多个连接,就要用到多线程。当accept()收到一个连接请求,就新建一个socket,然后把它交给一条新线程处理。
那么主线程怎么知道其他线程结束了呢?
可以通过用join()方法等待线程结束。thread_1.join()表示要等thread_1结束才执行后面的语句。
把新建的线程放进一个容器里,然后逐个使用join(),主线程就可以等待子线程结束才继续执行。
1 import java.io.*;
2 import java.net.*;
3 import java.util.ArrayList;
4 import java.util.Iterator;
5
6 public class MultiThreadServer {
7 static int portNum=10000;
8 static int counter=0;
9 public static void main(String[] args) throws IOException, InterruptedException{
10 ServerSocket server_socket=new ServerSocket(portNum);
11 System.out.println("Server has been started:"+server_socket);
12 ArrayList<MultiThreadSocket> list=new ArrayList<MultiThreadSocket>();
13 do{
14 Socket socket= server_socket.accept();
15 System.out.println("Accept the client:"+socket);
16 MultiThreadSocket thread=new MultiThreadSocket(socket);
17 thread.start();
18 list.add(thread);
19 counter++;
20 }while(counter<3);
21 server_socket.close();
22 System.out.println("Server has been closed");
23 Iterator<MultiThreadSocket> it=list.iterator();
24 while(it.hasNext()){
25 MultiThreadSocket t=(MultiThreadSocket) it.next();
26 t.join();
27 }
28 }
29 }
1 public class MultiThreadSocket extends Thread {
2 Socket socket;
3 BufferedReader in;
4 PrintWriter out;
5 MultiThreadSocket(Socket socket) throws IOException{
6 this.socket=socket;
7 in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
8 out=new PrintWriter(socket.getOutputStream(),true);
9 }
10 public void run() {
11 try{
12 sleep(15000);
13 while(true){
14 String str=in.readLine();
15 if(str.equals("Bye")){
16 out.println("Bye");
17 break;
18 }
19 System.out.println("Received message:"+str);
20 out.println("Received message:"+str);
21 }
22 socket.close();
23 }
24 catch(IOException e){} catch (InterruptedException e) {}
25 }
26 }

浙公网安备 33010602011771号