测试是否是线程安全
@RequestMapping("/test")
@RestController
public class TestController {//1、定义num,判断不同线程访问的时候,num的返回结果是否一致private Integer num=0;/*** 2、定义两个方法*/@GetMapping("/count1")public Integer test1(){System.out.println(++num);return num;}@GetMapping("/count2")public Integer test2(){System.out.println(++num);return num;}}
输出结果:
在两次请求中,变量实现了共享,所以是线程不安全的
如何变为线程安全方式
方式一:使用多例模式@Scope("prototype")
@RequestMapping("/test")
@Scope("prototype")
@RestController
方式二:使用threadLocal
@RequestMapping("/test")
@RestController
public class TestController {//1、定义threadLocal 线程独享ThreadLocal<Integer> threadLocal=new ThreadLocal<>();/*** 2、定义两个方法*/@GetMapping("/count1")public void test1(){threadLocal.set(1);System.out.println(threadLocal.get());}@GetMapping("/count2")public void test2(){threadLocal.set(2);System.out.println(threadLocal.get());}}