当前位置: 首页 > 编程语言 > Java > 正文

Java编程那些事儿97——多线程使用示例2

时间:2010-03-15 csdn 陈跃峰

12.3.2 模拟网络数据发送

在实际的网络程序开发中,由于网络通讯一般都需要消耗时间,所以网络通讯的内容一般都启动专门的线程进行处理。

这样,在一个最简单的网络程序程序中,至少就包含了两个线程:处理界面绘制和接收用户输入的系统线程,以及至少一个网络通讯线程。

下面以一个简单的模拟程序,实现模拟网络数据的发送功能,关于更详细的网络编程中线程的使用,可以参看后续的网络编程章节。

在该示例代码中,用户在控制台输入需要发送的内容,程序接收到用户的输入以后,启动一个单独的线程进行网络通讯,然后用户可以继续在控制台进行输入。示例代码如下所示:

package example2;
import java.io.*;
/**
* 模拟网络数据发送的测试类
*/
public class TestNet {
 public static void main(String[] args) {
  BufferedReader br = null;
  String input;
  try{
    //初始化输入流
    br = new BufferedReader(
    new InputStreamReader(System.in));
    //循环接收输入
    while(true){
     System.out.println("请输入内容(quit代表退出程序):");
     //读取控制台输入
     input = br.readLine();
     //判断是否是结束
     if(input.equals("quit")){
      break; //结束程序
     }
     //模拟发送
     NetDemoThread ndt = new NetDemoThread(input);
    }
  }catch(Exception e){
  }finally{
      try {
        br.close();
      } catch (Exception e) {}
  }
 }
}
package example2;
/**
* 通过继承Thread类的方式模拟网络通讯线程
*/
public class NetDemoThread extends Thread {
 String data;
 public NetDemoThread(String data){
  this.data = data;
  start();
 }
 public void run(){
  try{
    System.out.println("开始发送");
    Thread.sleep(10000);  //模拟网络发送的延迟
    System.out.println("发送完成,发送的内容是:" + data);
  }catch(Exception e){}
 }
}