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

我是否需要在Java中同步两个线程(一个读,一个写),java,multithreading,synchronization,Java,Multithreading,Synchronization,这个标题几乎是自我解释的 我是否需要同步两个线程1正在读取,而另一个正在用Java编写 我将添加更多详细信息: 让我们考虑我们有3个类,1个包含共享内存,1个用于从共享内存对象中增加变量的写入线程,1是要打印共享对象中变量值的读取线程。如果正在更改的线程开始递增,然后读取线程进行检查,那么它可能会收到旧值 如果增量就是这样,并且不是一个耗时的操作,那么这就不是问题 最重要的是:分配给内存的原子性: 我记得JLS:在读取时,对于int,字节也不会被损坏:新旧字节的混合,比如从255到256得到0x

这个标题几乎是自我解释的

我是否需要同步两个线程1正在读取,而另一个正在用Java编写

我将添加更多详细信息:

让我们考虑我们有3个类,1个包含共享内存,1个用于从共享内存对象中增加变量的写入线程,1是要打印共享对象中变量值的读取线程。如果正在更改的线程开始递增,然后读取线程进行检查,那么它可能会收到旧值

如果增量就是这样,并且不是一个耗时的操作,那么这就不是问题

最重要的是:分配给内存的原子性: 我记得JLS:在读取时,对于int,字节也不会被损坏:新旧字节的混合,比如从255到256得到0x00\u 00或0x01\u FF。除非在嵌入式处理器上,否则JavaME。 这不会持续很长时间,也不会持续两倍。 但是,对于这些类型,可以使用:

volatile long counter;
volatile double impreciseCounter;
它通过在线程执行之间采取预防措施来保证原子性


纯粹为了编码风格,原则上,我仍然会使用AtomicInteger或至少volatile,因为这样的技术实现要求似乎过于依赖于编译器和处理器。期待一个垄断性的股东。

这里没什么可谈的。不,这不是不言自明的。这些线程读写的是什么?读写机制本身是线程安全的吗?如果读线程不读写线程写的东西,则不会。非常感谢。我并不真正关心获取旧值,它将在下一次迭代中获取新值