当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java入门

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

    Java编程那些事儿系列文章(全集目录)

    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){}

         }

}

    在该示例中,TestNet类实现接收控制台输入,并在接收到用户输入以后,启动网络通讯线程发送数据,当用户在控制台输入quit时,结束程序。NetDemoThread类实现模拟网络通讯线程,在需要发送网络数据时,创建一个NetDemoThread类型的线程对象,并将需要发送的内容作为参数传入到该对象的内容,在run方法中,输出线程的状态,并使用一个延迟10秒,比实际的延迟要夸大很多,的代码模拟发送时的线程延迟。由于这里的延迟比较大,所以如果用户输入的数据速度比较快的话,会存在多个网络通讯的线程同时运行。

    下面是程序的运行结果:

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接