目录
写一个控制层的类
验证方法
编辑
分别执行如下请求,先执行等待时间久的
日志结果
结论
配置多例模式
配置文件application.properties
类加注解
配置类方式
写一个控制层的类
package com.example.ctr;
 
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
@Slf4j
public class Api {
       int cc = 0;
    static int ccs = 0;
    @RequestMapping("/sleep/{num}")
    public String sleep(@PathVariable int num) throws InterruptedException {
        cc = num;
        ccs = num;
        int s = num;
        log.info(Thread.currentThread().getName()+" "+num+"  start  方法级变量="+s+"类级变量=" +cc +" 类级静态变量="+ccs);
        Thread.sleep(num);
        log.info(Thread.currentThread().getName()+" "+num+" end   方法级变量="+s+"类级变量=" +cc +" 类级静态变量="+ccs);
        return "ok   方法级变量="+s+"类级变量=" +cc +" 类级静态变量="+ccs;
    }
}
 
 
 
验证方法
分别执行如下请求,先执行等待时间久的
http://localhost:8101/api/sleep/60000
http://localhost:8101/api/sleep/30000
http://localhost:8101/api/sleep/10000
http://localhost:8101/api/sleep/5000
http://localhost:8101/api/sleep/1000
日志结果
2023-07-03 14:19:06.616  INFO 33444 --- [nio-8101-exec-1] com.example.ctr.Api                      : http-nio-8101-exec-1 60000  start  方法级变量=60000类级变量=60000 类级静态变量=60000
2023-07-03 14:19:07.171  INFO 33444 --- [nio-8101-exec-2] com.example.ctr.Api                      : http-nio-8101-exec-2 30000  start  方法级变量=30000类级变量=30000 类级静态变量=30000
2023-07-03 14:19:08.318  INFO 33444 --- [nio-8101-exec-3] com.example.ctr.Api                      : http-nio-8101-exec-3 10000  start  方法级变量=10000类级变量=10000 类级静态变量=10000
2023-07-03 14:19:09.705  INFO 33444 --- [nio-8101-exec-4] com.example.ctr.Api                      : http-nio-8101-exec-4 5000  start  方法级变量=5000类级变量=5000 类级静态变量=5000
2023-07-03 14:19:11.277  INFO 33444 --- [nio-8101-exec-5] com.example.ctr.Api                      : http-nio-8101-exec-5 1000  start  方法级变量=1000类级变量=1000 类级静态变量=1000
2023-07-03 14:19:12.286  INFO 33444 --- [nio-8101-exec-5] com.example.ctr.Api                      : http-nio-8101-exec-5 1000 end   方法级变量=1000类级变量=1000 类级静态变量=1000
2023-07-03 14:19:14.707  INFO 33444 --- [nio-8101-exec-4] com.example.ctr.Api                      : http-nio-8101-exec-4 5000 end   方法级变量=5000类级变量=1000 类级静态变量=1000
2023-07-03 14:19:18.322  INFO 33444 --- [nio-8101-exec-3] com.example.ctr.Api                      : http-nio-8101-exec-3 10000 end   方法级变量=10000类级变量=1000 类级静态变量=1000
2023-07-03 14:19:37.181  INFO 33444 --- [nio-8101-exec-2] com.example.ctr.Api                      : http-nio-8101-exec-2 30000 end   方法级变量=30000类级变量=1000 类级静态变量=1000
2023-07-03 14:20:06.628  INFO 33444 --- [nio-8101-exec-1] com.example.ctr.Api                      : http-nio-8101-exec-1 60000 end   方法级变量=60000类级变量=1000 类级静态变量=1000
 
可见 执行久的线程,在运行中 对象级的变量,再新请求来后变量发生改变
结论
方法级变量线程安全
对象级变量和静态变量都不安全
ok
持续更新
配置多例模式
配置文件application.properties
spring.main.allow-bean-definition-overriding=true 
类加注解
@Component
@Scope("prototype")
public class MyBean {
    //...
} 
配置类方式
@Configuration
public class MyConfig {
    @Bean
    @Scope("prototype")
    public MyBean myBean(){
        return new MyBean();
    }
} 
 
 
 
 
 
 
 
ok
持续更新




















