2017-10-20 84 views
0

我被给了一个单线程应用程序,并要求它使多线程。有很多单例实例使用。@prototype范围如何帮助多线程

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

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

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

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

回答

0

你可以使用一个局部变量来达到上述目的,它不一定是一个实例变量。

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

这是我以为我会使用原型范围。这是否使得 有意义?

这是有道理的,但只有一件事,我没有看到一个实例变量的情况,正如我之前所说的,你可以很容易地用局部变量来解决这个问题。 将careful与一个原型scoped bean注入到一个singleton scoped bean中。 Spring Prototype scoped bean in a singleton

+0

这不仅仅是一个变量'计数器',但有很多这样的变量。 – hars

+0

如果这些变量不需要在不同线程之间共享,它可以是局部变量(在方法中包含生命周期的变量) –

+0

@hars如果这回答了您的问题,请接受它,这将有助于SO用户 –