分享
 
 
 

Java语言深入 多线程程序模型研究

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

多线程是较复杂程序设计过程中不可缺少的一部分。为了提高应用程序运行的性能,采用多线程的设计是一种比较可行的方案。本文通过介绍使用Java编写的扫描计算机端口的实例,来说明多线程设计中应注重的问题,以及得出经常使用的多线程模型。

本文要求读者具备一定的Java语言基础,对Socket有一定的了解。本文的所有程序在Java SDK 1.4.2编译通过并能正常运行。

现在,我们需要对一台主机扫描其端口,找出哪些端口是open的状态。我们先采用单线程进行处理,程序代码如下:

-------------------------------------------------------------------------------------------------------

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

public class PortScannerSingleThread {

public static void main(String[] args) {

String host = null; //第一个参数,目标主机。

int beginport = 1; //第二个参数,开始端口。

int endport = 65535; //第三个参数,结束端口。

try{

host = args[0];

beginport = Integer.parseInt(args[1]);

endport = Integer.parseInt(args[2]);

if(beginport <= 0 endport >= 65536 beginport > endport){

throw new Exception("Port is illegal");

}

}catch(Exception e){

System.out.println("Usage: java PortScannerSingleThread host beginport endport");

System.exit(0);

}

for (int i = beginport; i <= endport; i++) {

try {

Socket s = new Socket(host, i);

System.out.println("The port " + i + " is opened at " + host);

}catch (UnknownHostException ex) {

System.err.println(ex);

break;

}catch (IOException ex) {

}

}

}

}

--------------------------------------------------------------------------------------------------------

在以上程序中,通过java.net.Socket类来识别端口是否是open状态。程序接受3个参数,第一个参数是主机IP,第二和第三个参数是需要扫描的起始和中止的端口号(1~65535)。本程序(java PortScannerSingleThread 10.1.1.1 1 1000)运行结果如下:

The port 25 is opened at 10.1.1.182

The port 110 is opened at 10.1.1.182

The port 135 is opened at 10.1.1.182

...

但是,以上程序运行效率实在不敢恭维,把目标主机端口扫描一遍需要十几分钟甚至更长,估计没有哪个用户可以忍受这样的效率。

所以,提高程序处理效率是必须的,下面的程序通过多线程的方法来进行处理。程序代码如下:

----------------------------------------------------------------------------------------------------------

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

public class PortScannerMultiThread {

public static void main(String[] args) {

String host = null;

int beginport = 1;

int endport = 65535;

try{

host = args[0];

beginport = Integer.parseInt(args[1]);

endport = Integer.parseInt(args[2]);

if(beginport <= 0 endport >= 65536 beginport > endport){

throw new Exception("Port is illegal");

}

}catch(Exception e){

System.out.println("Usage: java PortScannerSingleThread host beginport endport");

System.exit(0);

}

for (int i = beginport; i <= endport; i++) {

PortProcessor pp = new PortProcessor(host,i); //一个端口创建一个线程

pp.start();

}

}

}

class PortProcessor extends Thread{

String host;

int port;

PortProcessor(String host, int port){

this.host = host;

this.port = port;

}

public void run(){

try{

Socket s = new Socket(host,port);

System.out.println("The port " + port + " is opened at " + host);

}catch(UnknownHostException ex){

System.err.println(ex);

}catch(IOException ioe){

}

}

}

QQRead.com 推出数据恢复指南教程 数据恢复指南教程

数据恢复故障解析

常用数据恢复方案

硬盘数据恢复教程

数据保护方法

数据恢复软件

专业数据恢复服务指南

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有