亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java語言深入 多線程程序模型研究(轉)

發布時間:2020-08-08 21:22:17 來源:ITPUB博客 閱讀:109 作者:ba 欄目:編程語言
Java語言深入 多線程程序模型研究(轉)[@more@]多線程是較復雜程序設計過程中不可缺少的一部分。為了提高應用程序運行的性能,采用多線程的設計是一種比較可行的方案。本文通過介紹使用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){
}
}
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广安市| 应用必备| 青田县| 张北县| 宽甸| 周至县| 普兰县| 郁南县| 博白县| 长海县| 泸定县| 邯郸县| 新津县| 湘西| 新巴尔虎右旗| 界首市| 镇宁| 卫辉市| 文安县| 濮阳市| 商南县| 介休市| 灵寿县| 内丘县| 泰州市| 吉水县| 临沂市| 黄浦区| 张家港市| 资讯| 清流县| 收藏| 恩施市| 祥云县| 兴安县| 顺昌县| 大港区| 荣昌县| 望都县| 梅州市| 玛曲县|