znhyz1 2011-01-04 14:32
浏览 212
已采纳

一段Java线程并发代码的修改

本代码用于测试Tomcat服务器压力
要求在原有的基础上做出如下改进:
1、当连接返回的时间超过5S则认为连接失败,结束测试,返回失败结果。
2、如果可以的话最好编写一个简单的图形化界面,用于输入线程数,显示返回结果等。
[code="java"]package com.eteda.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class TomcatTest {
private static String url = "http://10.226.144.175:8080/index.jsp";
private static Integer error = 0;
private static Integer threads = 200;
private static Long startTime;
private static Long totleTime;

public static void main(String[] args) {

    WorkThread[] workThreads = new WorkThread[threads];
    for (int i = 0; i < threads; i++) {
        workThreads[i] = new WorkThread();
    }

    startTime = System.currentTimeMillis();
    //System.out.printf("线程数组初始化耗时%d毫秒\n", (System.currentTimeMillis() -startTime));

    for (int i = 0; i < threads; i++) {
        workThreads[i].start();
    }

// if(error >= 1){
// System.out.println("本次测试结束!压力超标,请调小线程数量再测试一次!");
// }else{
// System.out.println("本次测试结束!未达上限,请调大线程数量再测试一次!");
// }
}

private static class WorkThread extends Thread {
    public void run() {
        @SuppressWarnings("unused")
        long start = System.currentTimeMillis();
        long end = 0;
        try {
            URL u = new URL(url);
            HttpURLConnection urlConn = (HttpURLConnection) u
                    .openConnection();
            urlConn.setUseCaches(false);
            urlConn.setRequestProperty("Content-type",
                    "text/html; charset=UTF-8");
            urlConn.connect();
            InputStream is = urlConn.getInputStream();
            StringBuffer buffer = new StringBuffer();
            readToBuffer(buffer, is);
            end = System.currentTimeMillis();
            totleTime = end - startTime;
        } catch (Exception e) {
            synchronized (error) {
                error++;
            }
            e.printStackTrace();
        }

        synchronized (threads) {
            threads--;

// System.out.printf("还有%d个未完线程, 耗时%d毫秒\n", threads,
// (System.currentTimeMillis() - startTime));
if (threads == 0) {
System.out.printf("总耗时:%d毫秒\n",totleTime);
System.out.printf("连接失败数量:%d\n", error);
}
}
}

    public void readToBuffer(StringBuffer buffer, InputStream is)
            throws IOException {
        String line; // 用来保存每行读取的内容
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(is));
        line = reader.readLine(); // 读取第一行
        while (line != null) { // 如果 line 为空说明读完了
            buffer.append(line); // 将读到的内容添加到 buffer 中
            buffer.append("\n"); // 添加换行符
            line = reader.readLine(); // 读取下一行
        }
    }
}

}[/code]

  • 写回答

1条回答

  • 王启军 2011-01-04 16:09
    关注

    已经有轮子了,用压力测试工具,神马效果都能出来,试试loadrunner

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!