我不明白这个类是不是线程安全的?
(你可能已经现在这个问题的答案,但我在这里包括它的完整性。)
的问题是value++
声明。这是一个多部分的声明。
- 读取
value
的值。
- 读取的值增加1。
- 新值存储在
value
。
该序列可以被另一个线程混合使用。说value
是5
。如果两个线程调用getNext()
(在同一个实例中),那么在完成后,您会预计value
为7
。然而,如果两个线程以前任何线程完成步骤1和2做第3步,他们都将写入值6
到value
:
- 线程1做第1步 - 读取
5
- 线程2做步骤1 - 将读取
5
- 线程2执行步骤2 - 由
1
- 线程2做步骤3增量
5
- 保存的值6
- 线程1做步骤2 - 增量
5
通过1
- 线程1做第3步 - 保存
6
就不会在每次一个线程需要调用该方法GETNEXT()的时候,它会 首先创建的这个实例值类?
不是每一次。这将是new UnsafeSequence().getNext()
一遍又一遍,这是没有道理的。但也许这不完全是你的意思。每个线程都可以拥有自己的类实例,并且可以调用getNext()
。在那种情况下,没有问题。
两个线程可以共享这个类的同一实例(除非明确 份额)?
不,必须以某种方式共享实例。但它可以在你不知情的情况下共享。例如,某些类可能有一个返回UnsafeSequence
实例的static
方法。你不知道它是否是每次都返回的实例,或者每次调用都创建一个新实例。 除非这是记录在某处。
有关API文档中类是否线程安全的讨论,指的是在线程之间共享实例的情况。如果一个实例不共享,则可以在多线程应用程序中使用它,只需,因为它只有一个线程可用。
我无法在那里看到显而易见的内容。谨慎地解释这个问题的背景? – Forkmohit
谢谢。我明白什么时候“分享”,见我问题的最后一句话。 – Forkmohit
对不起,我没有得到最后一部分。你能否详细说明一下。 –