美文网首页
如何测试一个对象在Spring MVC容器中线程的安全性

如何测试一个对象在Spring MVC容器中线程的安全性

作者: totohui | 来源:发表于2018-04-18 14:36 被阅读0次

一个对象是否是线程安全的,取决于它是否在线程间共享的。如果共享,就是不安全的。所以测试的话,就是在一段时间内,发起多个请求,比较多个请求中,这个对象的属性是否相同。如果相同就是不安全的。

测试类:

public class Test {

public static void main(String[] args) throws Exception {

String prefix = UUID.randomUUID().toString().replaceAll("-", "") + "::";

for (int i = 0; i < 1000; i++) {

final String value = prefix + i;

new Thread() {

@Override

public void run() {

try {

CloseableHttpClient httpClient = HttpClients

.createDefault();

HttpGet httpGet = new HttpGet(

"http://localhost:8080/test?key=" + value);

httpClient.execute(httpGet);

httpClient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}.start();

}

}

}

====控制器

@Controller

public class TestController {

// 存储已有参数,用于判断参数是否重复,从而判断线程是否安全

public static Set set = new HashSet<>();

@RequestMapping("/test")

public void test(HttpServletRequest request) throws InterruptedException {

// 判断线程安全

String value = request.getParameter("key");

if (set.contains(value)) {

System.out.println(value + "\t重复出现,request并发不安全!");

} else {

System.out.println(value);

set.add(value);

}

// 模拟程序执行了一段时间

Thread.sleep(1000);

}

}

相关文章

网友评论

      本文标题:如何测试一个对象在Spring MVC容器中线程的安全性

      本文链接:https://www.haomeiwen.com/subject/mnvvkftx.html