我们可以在春季让多个线程在同一个控制器和Singltonbean上起作用吗?>

问题描述 投票:0回答:1

在下面的代码中,如果我先调用getMyName(),然后再调用getOthersName()(当第一个请求仍在进行中时)。它会得到更新的名字吗?如果不是,为什么?

@RestController
public class controller {

    @Autowired
    Person person ;

    @Autowired
    private ApplicationContext ctx;

    Integer i = 0;

    @GetMapping("/getMyName")
    public void getMyName(){

        i = 200;

        person.setFirstName("AAAAA");

        for(int i = 0 ; i < 234562345; i++){
            for (int j = 0 ; j < 234562345; j++){
                for (int k = 0 ; k < 234562345; k++){

                }
            }
        }



    }

    @GetMapping("/getOthersName")
    public void getOthers(){


        System.out.println(person.getFirstName());

        Map test = ctx.getBeansOfType(Person.class);

        System.out.println(test.size());
    }
}

在下面的代码中,如果我先调用getMyName(),然后再调用getOthersName()(当第一个请求仍在进行中时)。它会得到更新的名字吗?如果不是,为什么? @RestController公共类...

multithreading rest thread-safety singleton spring-restcontroller
1个回答
0
投票

是,多个线程可以写入该字段。这样的单例组件永远都不应包含特定于请求的状态。

© www.soinside.com 2019 - 2024. All rights reserved.