Java线程测试高并发

package com.expai.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;

public class BingfaTest {
    protected static final Logger LOG = Logger.getLogger(BingfaTest.class);
    private static  BingfaTest binfaTest = new BingfaTest();
     public static BingfaTest getInstance() {
            return binfaTest;
        }
     //count为启动线程的个数,httpUrl为请求的url,para为需要传的参数
     public void exeThread(int count,String httpUrl,String para){
         CyclicBarrier cyclicBarrier = new CyclicBarrier(count);
         ExecutorService executorService = Executors.newFixedThreadPool(count);
         for (int i = 0; i < count; i++)
              executorService.execute(new BingfaTest().new Task(cyclicBarrier,httpUrl,para));
         //执行后不再执行新任务shutdown,
         executorService.shutdown();
         //当线程池的工作队列中的所有任务执行完毕,executorService.isTerminated()方法就会返回true。
         while (!executorService.isTerminated()) {
              try {
                   Thread.sleep(10);
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
         }
     }
     public class Task implements Runnable {
         private CyclicBarrier cyclicBarrier;
         private String httpUrl;
         private String para;

         public Task(CyclicBarrier cyclicBarrier,String httpUrl,String para) {
              this.cyclicBarrier = cyclicBarrier;
              this.httpUrl=httpUrl;
              this.para=para;
         }

         @Override
         public void run() {
              try {
                   // 等待所有任务准备就绪
                   cyclicBarrier.await();
                   // 测试内容
                   URL url =new URL(httpUrl+para);
                   HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                   connection.setDoOutput(true);
                   connection.setDoInput(true);
                   //组织提交信息
                   PrintWriter out = new PrintWriter(connection.getOutputStream());
                   out.print(para);
                   out.flush();
                   //获得返回信息
                   BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                   String line=null;
                   //返回的参数拼接成字符串
                   StringBuffer content = new StringBuffer();
                   while((line=in.readLine())!=null){
                       content.append(line);
                   }
                   in.close();
                   LOG.info("返回数据====="+content.toString());
              } catch (Exception e) {
                   e.printStackTrace();
              }
         }
    }
}

Java线程测试高并发,布布扣,bubuko.com

时间: 2024-10-13 16:16:58

Java线程测试高并发的相关文章

大型电商分布式网站架构设计与实践,Java分布式架构,Java事务分布式高并发-视频教程

15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat. Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.

Java线程同步和并发第1部分

通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习.我们将分两部分介绍Java中的线程同步,以更好地理解Java的内存模型. 介绍 Java线程同步和并发是复杂应用程序各个设计阶段中讨论最多的主题. 线程,同步技术有很多方面,它们可以在应用程序中实现高并发性. 多年来,CPU(多核处理器,寄存器,高速缓存存储器和主内存(RAM))的发展已导致通常是开发人员往往忽略的某些领域-例如线程上下文,上下文切换,变量可见性,JVM内存 型号与CPU内存型号. 在本

linux webbench测试高并发方法

linux webbench测试高并发方法由于ab小工具 测试高并发 会出错 具体原因http://newmiracle.cn/?p=594所以采用webbench这个来测试<pre> wget http://www.ha97.com/code/webbench-1.5.tar.gztar zxvf webbench-1.5.tar.gzcd webbench-1.5makemake install</pre> make install的时候会提示目录不存在 cannot crea

Java多线程与高并发:高并发解决思路

Java多线程与高并发:高并发解决思路 小玲子之凌空蹈虚关注 122018.11.21 09:55:30字数 1,553阅读 4,228 來源:http://www.wangtianyi.top/blog/2018/05/11/javaduo-xian-cheng-yu-gao-bing-fa-liu-gao-bing-fa-jie-jue-si-lu/ 缓存并发 image.png 当大量请求访问同一个没有被缓存的数据的时候,会发送大量请求给数据库,导致数据库压力过大,还会导致一致性问题,所以

java 关于多线程高并发方面

转有关的文章链接: Java 高并发一:前言: http://www.jb51.net/article/92358.htm Java 高并发二:多线程基础详细介绍 http://www.jb51.net/article/92360.htm Java 高并发三:Java内存模型和线程安全详解 http://www.jb51.net/article/92361.htm Java 高并发四:无锁详细介绍 http://www.jb51.net/article/92362.htm Java 高并发五:J

Java处理 网站高并发问题 的优化方法

Java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作.我推荐的是M-M-Slaves

Java优化高性能高并发+高并发程序设计

第1章 课程介绍及项目框架搭建1-1 Java高并发商城秒杀优化导学1-2 项目环境搭建(Eclipse)1-3 项目环境搭建(IDEA)1-4 集成mybatis1-5 安装redis1-6 集成redis上1-7 集成redis中1-8 集成redis下第2章 实现用户登录以及分布式session功能2-1 两次md52-2 登录功能实现上2-3 登录功能实现下2-4 jsr303参数校验2-5 异常处理2-6 分布式session上2-7 分布式session下第3章 秒杀功能开发及管理后

Java优化高性能高并发+高并发程序设计视频教程

转自:https://www.cnblogs.com/ajianku/p/10236573.html 第1章 课程介绍及项目框架搭建1-1 Java高并发商城秒杀优化导学1-2 项目环境搭建(Eclipse)1-3 项目环境搭建(IDEA)1-4 集成mybatis1-5 安装redis1-6 集成redis上1-7 集成redis中1-8 集成redis下第2章 实现用户登录以及分布式session功能2-1 两次md52-2 登录功能实现上2-3 登录功能实现下2-4 jsr303参数校验2

浅谈java中如何处理高并发的问题

1.从最基础的地方做起,优化我们写的代码,减少必要的资源浪费     a.避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以使用单例模式.对于String连接操作,使用StringBuffer或StringBuilder,对于工具类可以通过静态方法来访问.     b.避免使用错误的方式,尽量不用instanceof做条件判断.使用java中效率高的类,比如ArrayList比Vector性能好. 2.html静态化     我们通过一个链接地址访问,通过这个链接地址,服务器