我是否需要在Java中同步两个线程(1个读取,1个写入)

时间:2014-12-26 23:35:13

标签: java multithreading synchronization

标题几乎是自我解释的。

我是否需要在Java中同步两个线程(1正在读取而另一个正在写入)?

我会添加更多详情:

让我们考虑我们有3个类,1个包含共享内存,1个用于写入线程,它将从共享内存对象增加一个变量,1个用于读取线程,它将打印该值共享对象中的变量。

1 个答案:

答案 0 :(得分:0)

,就在你的情况下。如果更改的线程开始递增,然后读取线程进行检查,则它可以接收旧值。

如果增量只是那个,那不是问题,而不是耗时的操作。

最重要的:分配给内存的原子性: 我记得的JLS:在读取时,对于int,字节也不会被破坏:旧字节和新字节的混合,例如从255到256得到0x00_00或0x01_FF 。 (除非在嵌入式处理器上,java me)。 这不适用于longdouble。 但是对于那些类型,可以使用:

volatile long counter;
volatile double impreciseCounter;

通过在线程之间采取预防措施来保证原子性。执行。

纯粹对于编码风格,原则上,我仍然会使用AtomicInteger或至少volatile,因为这样的技术实现要求似乎过于依赖于编译器和处理器。预计会有一个垄断的利益相关者。