国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 11:01:44
字體:
來源:轉載
供稿:網友

    多線程是較復雜程序設計過程中不可缺少的一部分。為了提高應用程序運行的性能,采用多線程的設計是一種比較可行的方案。本文通過介紹使用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.            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 推出數據恢復指南教程 數據恢復指南教程 數據恢復故障解析 常用數據恢復方案 硬盤數據恢復教程 數據保護方法 數據恢復軟件 專業數據恢復服務指南



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石台县| 乌兰察布市| 海南省| 尉犁县| 嘉兴市| 绍兴县| 杂多县| 关岭| 吕梁市| 汉寿县| 慈利县| 白山市| 休宁县| 二连浩特市| 泌阳县| 利辛县| 正定县| 元阳县| 宝丰县| 通渭县| 峨边| 大城县| 盐源县| 渑池县| 和平县| 安阳市| 伊春市| 巴彦县| 休宁县| 高清| 同德县| 通化县| 宁乡县| 珠海市| 崇明县| 沾益县| 水城县| 台中县| 河北区| 铜山县| 阳山县|