java实现代码在线编译器-从零开发(三)Web并发环境下的线程安全

并发环境下会出现什么问题?

上一篇已经测试过,单个请求是能正常执行并且返回的。但是,系统部署在公网上往往不可能一个人使用,因此必须经过并发测试,不求多规范,至少简单的并发测试也是要进行的。
Apifox图形化界面测试十分简单,还能添加变量。如下所示,简单点,两个线程循环两遍。
在这里插入图片描述
修改测试代码,Thread.sleep(1000)模拟测试程序需多耗时一秒。编辑一个自增变量(Apifox文档一使用说明,每次请求id+1)

{
   
    "code": "public class Main {\n public static void main(String[] args) throws Exception{ Thread.sleep(1000); System.out.println(\"hello world----自增id {% mock 'increment', 1 %} \");}}"
}

下面给出我的测试结果:

线程1第一轮:
{
   
    "code": "public class Main {\n public static void main(String[] args) throws Exception{ Thread.sleep(1000); System.out.println(\"hello world----自增id 3 \");}}"
}
{
   
    "error": 0,
    "reason": "运行成功",
    "stderr": "",
    "stdout": "hello world----自增id 4 \n"
}
线程1第二轮:
{
   
    "code": "public class Main {\n public static void main(String[] args) throws Exception{ Thread.sleep(1000); System.out.println(\"hello world----自增id 5 \");}}"
}
{
   
    "error": 0,
    "reason": "运行成功",
    "stderr": "",
    "stdout": "hello world----自增id 6 \n"
}
线程2第一轮:
{
   
    "code": "public class Main {\n public static void main(String[] args) throws Exception{ Thread.sleep(1000); System.out.println(\"hello world----自增id 4 \");}}"
}
{
   
    "error": 0,
    "reason": "运行成功",
    "stderr": "",
    "stdout": "hello world----自增id 4 \n"
}
线程2第二轮:
{
   
    "code": "public class Main {\n public static void main(String[] args) throws Exception{ Thread.sleep(1000); System.out.println(\"hello world----自增id 6 \");}}"
}
{
   
    "error": 0,
    "reason": "运行成功",
    "stderr": "",
    "stdout": "hello world----自增id 6 \n"
}

可知四次网络请求,分别发送了3,4,5,6。而执行结果为(4,4)(6,6)。此时已经出现问题了。

Spring默认单例(后发现与本次无关)

用的的应该都知道SpringMVC(SpringBoot还是有的MVC)的Controller,默认是单例的,可以进行如下测试:
先修改一下TestController的代码,输出对象且直接返回:

@RequestMapping(value = "/run")
    public String run(@RequestBody JSONObject json){
   
        System.out.println(this+"---"+service
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值