`

java多线程发送URL请求

 
阅读更多



import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * This Class to test the PrintNet processing the snapshot performance.
 * It's mainly to solve the out of memory issue.
 * 
 * @author yfan
 *
 */
public class PnSnapshotPerformanceTest extends Thread {
  
  //TODO threadNumber
  private static final int threadNumber = 50;//50
  
  private static final int perThreadCreatSnpNumber = 20;//20
  
  private static final String urlStr = "http://**************com:6080/pn_entry.jsp";
  
  private static final SimpleDateFormat dateFomat =
      new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:ms");
  
  public PnSnapshotPerformanceTest() {
    super();
  }

  public PnSnapshotPerformanceTest(String name) {
    super(name);
  }

  @Override
  public void run() {
    for (int i = 1; i <= perThreadCreatSnpNumber; i++) {
      long startTime = System.currentTimeMillis();
      System.out.println(getCurrDateStr() + " " + this.getName() + "_" + i + ": Start to handle the snapshot <<<<<<<<<<<<<<<<<<<<<<<<<<" + getCurrentMemoryInfo());
      
      try {
        doPost();// send post request
      } catch (Exception e) {
        e.printStackTrace();
      }
      
      long useTime = System.currentTimeMillis() - startTime;
      System.out.println(getCurrDateStr() + " " +this.getName() + "_" + i + ": Handle the snapshot end >>>>>>>>>>>>>>>>>>>>>>>>>>>>use time: " + useTime/60000 + ":" + useTime%60000/1000 + ":" + useTime%60000%1000);
    }
  }
  
  public void doPost() {
    HttpURLConnection conn = null;
    try {
      URL url = new URL(urlStr);
      conn = (HttpURLConnection) url.openConnection();
      conn.setInstanceFollowRedirects(false);
      conn.setDoOutput(true);
      conn.setRequestMethod("POST");
      //conn.setUseCaches(false);
    
      //TODO test
      String snapshotStr = readFile("C:/bill/HP/eclipse_workspace/DailyPractice/src/d20130304/snapshot.xml");
      //String snapshotStr = readFile("C:/bill/HP/eclipse_workspace/DailyPractice/src/d20130304/snapshot_2.xml");
      StringBuffer sb = new StringBuffer();
      addPair(sb, "XML_string", snapshotStr);
      String parametersStr = sb.substring(0, sb.length() - 1);
      //System.out.println("parametersStr: \n" + parametersStr.substring(0, 1000));
      
      OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
      out.write(parametersStr);
      out.flush();
      out.close();
      
      //conn.getInputStream();
      BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
      String line = null;
      sb = new StringBuffer();
      while ((line = reader.readLine()) != null) {
        sb.append(line);
      }
      
      line = sb.toString();
      System.out.println("return line: \n" + line);
      //System.out.println(">>>>>>>>>>>>>>>>>>>>>>>Send request end. ");
      
      System.out.println("conn.getResponseCode(): " + conn.getResponseCode());
    } catch (IOException e) {
      // handle e
      System.out.println(">>>>>>>>>>>>>>IOException: " + e);
    } finally {
      if (conn != null) {
        conn.disconnect();
        //System.out.println("Disconnect successfully. ");
      }
    }
  }
  
  private String readFile(String filePath) {
    FileReader fr = null;
    BufferedReader br = null;
    StringBuffer sBuffer = new StringBuffer();

    try {
      fr = new FileReader(filePath);// d20130304/snapshot.xml
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }

    br = new BufferedReader(fr);
    String tempLine;
    try {
      tempLine = br.readLine();
      while (tempLine != null) {
        sBuffer.append(tempLine);
        sBuffer.append("\n");
        tempLine = br.readLine();
      }
      //System.out.println("sBuffer: \n" + sBuffer);
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        if (br != null)
          br.close();
        if (fr != null)
          fr.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    
    return sBuffer.toString().trim();
  }
  
  public static void addPair(StringBuffer sb, String name, String value)
      throws UnsupportedEncodingException {
    if (value == null) {
      return;
    }
    sb.append(name);
    sb.append("=");
    sb.append(java.net.URLEncoder.encode(value, "UTF-8"));
    sb.append("&");
  }
  
  public static String getCurrDateStr() {
    Date date = new Date();
    return dateFomat.format(date);
  }
  
  public String getCurrentMemoryInfo () {
    StringBuilder sb = new StringBuilder();
    try {
      Runtime runtime = Runtime.getRuntime();

      NumberFormat format = NumberFormat.getInstance();

      long maxMemory = runtime.maxMemory();
      long allocatedMemory = runtime.totalMemory();
      long freeMemory = runtime.freeMemory();

      sb.append("free memory: " + format.format(freeMemory / 1048576) + "; ");
      sb.append("allocated memory: " + format.format(allocatedMemory / 1048576)
          + "; ");
      sb.append("max memory: " + format.format(maxMemory / 1048576) + "; ");
      sb.append("total free memory: "
          + format.format((freeMemory + (maxMemory - allocatedMemory)) / 1048576)
          + "; ");

      return sb.toString();
    } catch (Exception e) {
      e.printStackTrace();
    }
    
    return sb.toString();
  }

  public static void main(String[] args) {
    for (int i = 1; i <= threadNumber; i++) {
      PnSnapshotPerformanceTest pspt = new PnSnapshotPerformanceTest("Thread_" + i);
      pspt.start();
    }
  }
  
}


分享到:
评论

相关推荐

    Java 利用多线程实现文件的分片下载

    刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...

    java多线程下载

    b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii.setConnectTimeout iii.setReadTimeout d)判断是否响应成功 e)获取文件长度(getContentLength()) f)随机访问...

    java Swing窗体版多线程下载程序编写示例.rar

    java Swing窗体版多线程下载程序编写示例,多线程下载的实现, 将网络URL中指定的网络文件下载到本地文件中保存。  本代码中将完成新建任务构造器、配置文件构造器,保存下载信息,获取配置文件名,设置在前台显示...

    JAVA多线程与线程安全实践-基于Http协议的断点续传.zip

    SpringMVC负责处理请求和响应,可以实现灵活的URL映射和请求处理。MyBatis或Hibernate可以简化数据库操作,提供了方便的ORM(对象关系映射)功能,使得数据的持久化变得简单和高效。 通过以上技术选择和框架搭建,该...

    基于Java的多线程爬虫框架.zip

    URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的...

    java抓取技术源码-multithreading-crawlers:多线程爬虫--抓取淘宝商品详情页URL

    多线程爬虫--抓取淘宝商品详情页URL 本项目是一个Java编写的多线程爬虫系统。此系统与我之前开发的结合使用,共抓取了淘宝近3000个页面,从中解析到了近9万的商品详情页URL。 我并没有直接将这些商品详情页中最具...

    java 原生开发的多线程网络爬虫 .zip

    URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    Java NIO+多线程实现聊天室

    涉及到的技术点 ...提交任务:task.file:图片的URL / task.crawl_image:豆瓣电影的id[?imageSize=n] 可以添加请求参数 例1:task.file: https://img1.doubanio.com/view/movie_poster_cover/lpst/public/

    Java开发基于多线程和NIO实现聊天室源码+项目说明(含服务端+客户端).zip

    Java开发基于多线程和NIO实现聊天室源码+项目说明(含服务端+客户端).zip 涉及到的技术点 - 线程池ThreadPoolExecutor - 阻塞队列BlockingQueue,生产者消费者模式 - Selector - Channel - ByteBuffer - ...

    java开源包11

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包6

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包4

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包9

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包101

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包5

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包8

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    java开源包10

    Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 Java...

    百度地图开发java源码-HttpDownload:基于socket的http多线程下载

    基于socket的http多线程下载,传入的url(这个url必须是可以下载的、请求资源的连接)、下载的线程数、保存的本地位置这三个参数,然后通过解析url,获取host、path、port等信息来组装报文。 先发送head请求来获得...

Global site tag (gtag.js) - Google Analytics