多线程访问网页+高并发测试网站

本文介绍了一个使用多线程并发抓取网页并进行高并发测试的方法,通过自定义线程类和启动类实现动态参数控制,监控线程状态直至所有任务完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程访问网页+高并发测试网页

仅供学习,请勿用于非法用途。


线程类如下


import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class TestThread extends Thread{
    
    private String httpurl;
    
    public TestThread(String httpurl){
        this.httpurl = httpurl;
    }
    
    public void run() {
        HttpURLConnection connection = null;
        InputStream urlStream = null;
        URL url = null;
          try {
            url = new URL(httpurl);

            connection = (HttpURLConnection)url.openConnection();
            connection.connect();
            urlStream = connection.getInputStream();
            Thread.sleep(10L); } catch (InterruptedException e) {
          }
          catch (MalformedURLException e)
          {
            e.printStackTrace();
          }
          catch (IOException e) {
            e.printStackTrace();
          }
      }
}


启动类如下


public class Test {
	
	public static void main(String[] args) {
		while (true) {
			//仅供学习请勿用于非法用途
			startThead();
		}
	}
	
	public static int threadCount = 55;   //线程数量
	private static boolean isRunGrabThread = true;     //抓取线程是否执行完毕
	static int  num = 1; //动态参数
	
	public static void startThead(){
		Thread[] grabThreads= new Thread[threadCount];	
		try{		  
			//开启-数据抓取子线程
		  	for(int i=0;i<grabThreads.length;i++){
		  		int numL = num*100;
		  		System.out.println(numL);
		  		String url = "http url ?id=" + numL;
			  	Thread searchThread=new TestThread(url);
			  	num++;
		  		grabThreads[i] = searchThread;
		  		grabThreads[i].setDaemon(true);
		  		grabThreads[i].start();
		  	}
			
		  	isRunGrabThread = true;
		  	
		  	//监控子线程,全部完成程序退出
		    WhileLoop:		    			    	
		    	
		    while(true){
		    	
		    	//拨号策略控制
		    	//reconnectControl();	
		    	
				//判断子线程是否运行完成
		    	for(int i=0;i<threadCount;i++){
		    		if(grabThreads[i].isAlive()){
		    			Thread.sleep(10);
		    			continue WhileLoop;
		    		}
		    	}

		    	//所有抓取线程执行完毕
		    	isRunGrabThread = false;
		    	
		    	//子线程执行完毕则退出
		    	break;
		    }
		} 
		catch (Exception e) {
			System.out.println("main主线程--系统异常!");
		}		
	}

}



第二种办法:

package com.yjf.soso;


import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

public class Shua
  implements Runnable
{
  private static String strUrl = null;
  private static long numL = 0L;
  private static Scanner scanner = new Scanner(System.in);

  public void run() {
    HttpURLConnection connection = null;
    InputStream urlStream = null;
    URL url = null;
    while (true)
      try {
        url = new URL(strUrl + numL);

        connection = (HttpURLConnection)url.openConnection();
        connection.connect();
        urlStream = connection.getInputStream();
        if (urlStream != null) {
          numL += 1L;
          urlStream.close();
          System.out.print("\t" + numL);
          if (numL % 30L == 0L) {
            System.out.println();
          }
        }
        Thread.sleep(10L); } catch (InterruptedException e) {
        while (true) {
          e.getMessage();
          try {
            Thread.sleep(1000L); } catch (InterruptedException ie) {ie.printStackTrace(); }
        }
        
      }
      catch (MalformedURLException e)
      {
        e.printStackTrace();
      }
      catch (IOException e) {
        e.printStackTrace();
      }
  }

  public static void main(String[] args) throws MalformedURLException
  {
    System.out.println("");
    int threadNum;
    while (true)
    {
      System.out.println("请输入要生成的线程数:");
      threadNum = scanner.nextInt();
      System.out.println("请输入网址:");
      String str = scanner.next();

      if ((!(str.startsWith("http://"))) && (!(str.startsWith("https://")))) {
        strUrl = "http://" + str;
        System.out.println(strUrl);
      } else {
        strUrl = str;
      }

      if (str.indexOf("?") >= 0)
        strUrl += "&num=";
      else {
        strUrl += "?num=";
      }
      System.out.println("--------------------------------------");
      System.out.println("线程数:" + threadNum);
      System.out.println("地址" + str);
      System.out.println("请再次确认(Y/N):");
      String tmp = scanner.next();
      if ("Y".equalsIgnoreCase(tmp))
        break;
      if ("N".equalsIgnoreCase(tmp)) {
        continue;
      }
      System.out.println("输入错误,请重新输入(Y/N):");
    }

    for (int i = 0; i < threadNum; ++i) {
    	Shua at = new Shua();
      Thread t = new Thread(at);
      t.start();
    }
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值