@prototype范围如何帮助多线程

时间:2017-10-20 18:27:33

标签: java multithreading spring-boot singleton prototype

我获得了一个单线程应用程序并要求将其设置为多线程。使用了许多单例实例。

我知道当多个线程之间共享一个单例实例时,该实例的所有变量都将在多个线程之间共享。

例如,有一个count变量,它是一个单例实例变量。我的想法是每个线程都应该递增'count'。每个线程只增加一次。所以计数器应该是1.如果我增加共享对象的这个变量,所有线程都将获得该值。所以当第二个线程执行它时,该值不会是1,而是2.对于增加它的第n个线程,它看到的值将是n,而不是1.

为了防止这种情况,我在该类上使用了原型范围。现在我将为每个线程获取一个新对象,并且每个线程的计数器将保持为1。

这就是我认为我会使用原型范围的方式。这有道理吗?我给了一个计数器的例子,在该共享实例中有许多不同类型的变量。 我对原型的使用是否合理?

1 个答案:

答案 0 :(得分:0)

您可以将局部变量用于上述目的,它不必是实例变量。

  

为了防止这种情况,我在该类上使用了原型范围。现在   我将为每个线程获取一个新对象,计数器将保持为1   对于每个线程。

     

这就是我认为我会使用原型范围的方式。这样做   感?

这是有道理的,但唯一的问题是,我没有看到实例变量的情况,正如我之前所说,你可以轻松地用局部变量来实现。 将careful与原型范围的bean注入到单例范围的bean中。 Spring Prototype scoped bean in a singleton