看是否是线程安全

@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());
    }
 
}