java模拟并发操作进行压力测试

本文介绍了一个使用Java进行并发测试的案例,通过多线程模拟客户端访问,验证系统的并发处理能力。测试涉及线程池、信号量等并发控制机制,并展示了如何发起HTTP请求。

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

package com.concurrent;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class ConcurrentTest {

private static int thread_num = 400;
private static int client_num = 400; private static int record_num = 577;
private static String[] fpdm = new String[record_num];
private static String[] fphm = new String[record_num];
private static String fpzldm = "00";
private static String yhxm = "";
private static String sfzh = "";
private static String lxdh = "";
private static String yzm = "1234";

static {
 try {
  //读取测试数据
  InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("D:\\prj\\concurrent\\bin\\com\\nns\\fplrxx.txt")), "utf-8");
  BufferedReader buffer = new BufferedReader(isr);
  String line = "";
  int count = 0;
  while ((line = buffer.readLine()) != null) {
   fpdm[count] = line.split("@")[0];
   fphm[count] = line.split("@")[1];
   count++;
  }
  System.out.println("总测试数据个数是:"+count);
 } catch (Exception e) {
  e.printStackTrace();
 }
}

public static void main(String[] args) {
 //创建缓冲线程池,用于执行多线程
 ExecutorService exec = Executors.newCachedThreadPool();
 //thread_num个线程可以同时访问
 final Semaphore semp = new Semaphore(thread_num);
 //模拟client_num个客户端访问
 for (int index = 0; index < client_num; index++) {
  final int NO = index;
  //此处是请求的参数查询串
  final String para = "fpzldm="+fpzldm+"&fpdm="+fpdm[index]+"&fphm="+fphm[index]+"&yhxm="+yhxm+"&sfzh="+sfzh+"&lxdh="+lxdh+"&yzm="+yzm;
  //run方法内是线程执行的内容
  Runnable run = new Runnable() {
   public void run() {
    try {
     // 获取许可
     semp.acquire();
     System.out.println("第: " + NO+" 个开始");
     String host = "http://localhost:8088/prj/action.do?"; //此处填写供测试的URL      
     URL url = new URL(host);
     //打开连接
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();     
     connection.setDoOutput(true);
     connection.setDoInput(true);
     PrintWriter out = new PrintWriter(connection.getOutputStream());
     //发送参数
     out.print(para);
     out.flush();
     out.close();
     //返回请求
     BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
     String line = ""; 
     String result = "";
     while ((line = in.readLine()) != null) {
      result += line;
     }
     //System.out.println(result);
     System.out.println("第:" + NO + " 个完毕");
     // 释放许可
     semp.release();
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  };
  //执行线程
  exec.execute(run);
 }
 
 // 退出线程池
 exec.shutdown();

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值