快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

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

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

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

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

下面是程序的运行结果:

请输入内容(quit代表退出程序): abc 请输入内容(quit代表退出程序): 开始发送 123 请输入内容(quit代表退出程序): 开始发送 tbc 请输入内容(quit代表退出程序): 开始发送 faga 请输入内容(quit代表退出程序): 开始发送 发送完成,发送的内容是:abc hfsd 请输入内容(quit代表退出程序): 开始发送 发送完成,发送的内容是:123 发送完成,发送的内容是:tbc 发送完成,发送的内容是:faga 发送完成,发送的内容是:hfsd quit

在该次运行中,用户依次输入了:123、tbc、faga和hfsd,当用户输入完成以后,模拟网络通讯的线程就被启动,这个可以从输出“开始发送”语句看出,当内容发送完成以后线程自然结束。最后输入quit指令结束程序。

当然,该程序会在用户输入的内容不同时出现很多不同的结果,这些结果能够使你体会到两点:

1、多个网络通讯的线程在同时工作,互不干扰。

2、当输入quit以后,如果还有网络通讯的线程没有结束,则程序会等待到网络通讯的线程结束以后才真正结束。

当然,这两个简单的例子只能够使你熟悉基本的多线程编程的使用,还没有进入到多线程编程的核心。

其实,当多线程一起运行时,除了带来一系列的优势以外,还会带来一系列的问题。例如现实社会中,一个儿子继承遗产时就很简单,但是当有多个儿子呢?所以,下面来深入线程的概念,理解多线程编程存在的问题以及解决办法。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号