• java 检测可用端口


    ---恢复内容开始---

    检测本机正在使用的服务端口,尽量快完成,计算消耗时间:

    轮询:

     1 public class test implements Runnable {
     2     //private static String host="210.39.3.164";
     3     private static int i=0;
     4     static Date one,two;
     5     public synchronized int get(){
     6         if(i>=1024)notifyAll();
     7         return i++;
     8     }
     9     
    10     public static void main(String argv[]){
    11         one=new Date();
    12         //long time=one.getTime()-two.getTime();
    13         //System.out.println(time);
    14         ExecutorService pool = Executors.newFixedThreadPool(30);
    15         for(int j=0;j<15;j++){
    16             pool.submit(new Thread(new test()));
    17         }
    18         pool.shutdown();
    19         while(true){
    20             if(pool.isTerminated()){
    21                 System.out.println(two.getTime()-one.getTime());
    22                 break;
    23             }
    24         }
    25     }
    26     
    27     public void run(){
    28         int temp;
    29         while((temp=get())<1024){
    30             try {    
    31                 Socket s=new Socket(InetAddress.getLocalHost(),temp);
    32                 System.out.println("服务端口:   "+temp);
    33                 s.close();
    34             } catch (UnknownHostException e) {
    35                 // TODO Auto-generated catch block
    36                 e.printStackTrace();
    37             } catch(ConnectException e){
    38                 System.out.println(temp+"不是服务端口");
    39             }catch (IOException e) {
    40                 // TODO Auto-generated catch block
    41                 e.printStackTrace();
    42             }
    43             if(temp==1023){
    44                 two=new Date();
    45             }
    46         }
    47     }
    48 }

    尽量多开线程:

    public class test {
    	public static void main(String argv[]){
    		int i;
    		Date d=new Date();
    		ExecutorService pool = Executors.newFixedThreadPool(1204);
    		for(i=1;i<=1024;i++){
    			pool.submit(new Thread(new thread(i)));
    		}
    		pool.shutdown();
    		while(true){
    			if(pool.isTerminated()){
    				Date last=new Date();
    				System.out.println(last.getTime()-d.getTime());
    				break;
    			}
    		}
    		
    	}
    }
    
    
    class thread implements Runnable{
    	int i;
    	thread(int i){
    		this.i=i;
    	}
    	
    	public void run(){
    		try {	
    			Socket s=new Socket(InetAddress.getLocalHost(),i);
    			System.out.println("服务端口:   "+i);
    			s.close();
    		} catch (UnknownHostException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch(ConnectException e){
    			//System.out.println(i+"不是服务端口");
    		}catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

      

    轮询方法使用了线程同步,但是没有多开线程方法速度快

    ---恢复内容结束---

  • 相关阅读:
    bugku细心地大象
    【学术篇】一些水的不行的dp
    【笔记篇】莫队算法(一)
    【学术篇】luogu1351 [NOIP2014提高组] 联合权值
    【学术篇】网络流24题——方格取数加强版
    【学术篇】SDOI2009 SuperGCD
    【学术篇】网络流24题——方格取数问题
    【模板篇】A* 寻路算法
    【模板篇】k短路 SDOI2010 魔法猪学院
    【学术篇】SDOI2009 最优图像
  • 原文地址:https://www.cnblogs.com/ming-szu/p/6784571.html
Copyright © 2020-2023  润新知