现在的位置: 首页 > 综合 > 正文

浅谈多线程及其应用

2013年08月10日 ⁄ 综合 ⁄ 共 2522字 ⁄ 字号 评论关闭
 

程序的一次执行,称为进程,一个进程可以由一个或者多个线程组成,这些线程在逻辑上是同时执行的,并且是相互独立的,如果在一个进程中含有多个线程,就是多线程应用。
在Java中有两种方法来实现多线程:继承Thread类和实现Runnable接口。
publicclass A extends Thread{
    publicvoid run() {
       System.out.println("a");
       System.out.println("aa");
    }
}
////////////////////////////////////////////
publicclass C implements Runnable{
    publicvoid run() {
       System.out.println("c");
       System.out.println("cc");
    }
}
////////////////////////////////////////////
publicclass D {
    publicstaticvoid main(String[] args) {
       A a = new A();
       a.start();
      
       C c = new C();
       new Thread(c).start();
 
       System.out.println("main");
    }
}
////////////////////////////////////////////
我们在用Eclipse调使D时,可以看到:
从上图中,可以很清晰看到该进程由三个线程组成,这样,我们很容易就实现了多线程。
////////////////////////////////////////////
在Java 中Socket通信是多线程的典型应用。设想有一个服务器,它可以接受多个客户端的请求,并且这些请求是并发的,这就是一个多线程应用。
新建服务器类:
publicclass Server extends Thread{
    private Socket client;
 
    public Server(Socket c) {
       this.client = c;
    }
 
    publicvoid run() {
       try {
           BufferedReader in = new BufferedReader(new InputStreamReader(client
                  .getInputStream()));
           PrintWriter out = new PrintWriter(client.getOutputStream());
           //处理客户端请求,直到客户端输入exit,结束服务
           while (true) {
              String str = in.readLine();
              System.out.println(str);
              out.println("has receive....");
              out.flush();
              if (str.equals("exit"))
                  break;
           }
           client.close();
       } catch (IOException ex) {
       } finally {
       }
    }
 
    publicstaticvoid main(String[] args) throws IOException {
       //(主线程)服务器监听5678端口,等待请求
       ServerSocket server = new ServerSocket(5678);
       while (true) {
           //启动一个线程为客户端服务,(主线程)服务器继续监听5678端口,等待请求
           Server thread = new Server(server.accept());
           thread.start();
       }
    }
}
////////////////////////////////////////////
新建客户端类:
publicclass Client {
    publicstaticvoid main(String[] args) throws UnknownHostException,
           IOException {
       //新建客户端,同时向服务器请求服务
       Socket server = new Socket(InetAddress.getLocalHost(), 5678);
      
       BufferedReader in = new BufferedReader(new InputStreamReader(server    .getInputStream()));
       PrintWriter out = new PrintWriter(server.getOutputStream());
       BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
       //客户端向服务提出请求,直到exit结束请求
       while (true) {
           String str = wt.readLine();
           out.println(str);
           out.flush();
           if (str.equals("exit")) {
              break;
           }
           System.out.println(in.readLine());
       }
 
       server.close();
 
    }
}


 
 
 

 

抱歉!评论已关闭.