java的并发测试

来源:互联网 发布:边际递减效应爱情知乎 编辑:程序博客网 时间:2024/06/05 06:02

1. 什么是并发测试

通过代码的编写和工具的利用模拟多线程(多用户)来执行某一个业务操作。来确保业务在多线程的环境下业务(或者说数据的)的正确性

2. 为什么做并发测试

我们常常听到线上环境在高并发的情况下。出现用户的账户余额不对,一个手机号注册了两个账户这类情况。所以我们有必要模拟大量用户的并发测试

3. 如何做并发测试

我在这儿是使用的是testng的方法。见如下实例(在多线程的环境下,非线程安全)

package com.one;import java.util.HashMap;import org.testng.annotations.AfterTest;import org.testng.annotations.Test;public class UnsafeCountingFactorizer {    private long count=0;    public long getCount(){        return count;    }    @Test(invocationCount=20000,threadPoolSize=1000)     public void service() {        HashMap<String, String> hashMap  = new HashMap<String,String>();        hashMap.put("1", "1");        hashMap.put("1", "1");        hashMap.put("1", "1");        hashMap.put("1", "1");        ++count;        HashMap<String, String> hashMap2  = new HashMap<String,String>();        hashMap2.put("1", "1");        hashMap2.put("1", "1");        hashMap2.put("1", "1");    }    @AfterTest    public void endService(){        System.out.println("count value{}:"+count);    }   }

参数讲解
invocationCount:注解的方法执行多少次,threadPoolSize:启动多少个线程去执行。两个参数合起来的含义是启动多少个线程一共执行多少次

结果
预期的结果是20000次,但是事实非如此,见下图:
这里写图片描述

0 0