这是@autowire TestRunner testRunner的控制器。我认为spring会创建具有单调范围的bean,因此testRunner将在所有线程之间共享。
testRunner使用secc方法来设置一些类级别的变量。

这种方法会在多线程中造成问题吗?

@Controller
@RequestMapping("/welcome")
public class HomeController {

@Autowire
TestRunner testRunner;

    @RequestMapping(method = RequestMethod.GET)
    public void addCustomerPage(User user) {

        A a = new A();
        a.set(user.get) ....
        B b = new B();
        b.set(user.get) ....
        C c = new C();
        c.set(user.get) ....

        testRunner.setTestRunner(a, b, c);
        Thread t = new Thread(testRunner);
        t.start();
    }

}


这是TestRunner类。

@Component
public class TestRunner implements Runnable{

    private A a;
    private B b;
    private C c;

    public void setTestRunner(A a, B b, C c){
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public void run() {
        //  use a,b,c.

    }

}

最佳答案

是的,

您的测试运行程序类是单例类,因此它位于应用程序范围内,从而在整个应用程序之间共享同一实例。

但是,您以有状态方式使用它,根据您在请求中收到的内容为其设置值。

要么将您的TestRunner类范围设置为原型,要么根本不自动接线并创建一个新的testrunner实例

@Scope(value = "prototype")

07-26 05:03