空的 synced(this){} 对线程之间的内存可见性有什么意义吗?
我在StackOverflow上的一篇投票评论中读到了这一点:
但是如果你想安全,你可以在末尾添加简单的synced(this){}@PostConstruct[方法]
[请注意,变量不是易失性的]
我在想,只有当写入和读取都在块中执行或至少读取是易失性的时,才会强制发生之前。synchronized
引用的句子是否正确?空块是否会将当前方法中更改的所有变量刷新为“一般可见”内存?synchronized(this) {}
请考虑一些风景
如果第二个线程从不调用锁定怎么办?(假设第二个线程在其他方法中读取)。请记住,这个问题是关于:刷新对其他线程的更改,而不是为其他线程提供一种(同步)来轮询原始线程所做的更改的方法。在其他方法中,其他方法中的无同步也很可能在Spring上下文中 - 正如原始评论所说。
this
@PostConstruct
更改的内存可见性是否仅在另一个线程的第二次和后续调用中强制执行?(请记住,此同步块是我们方法中的最后一次调用) - 这会将这种同步方式标记为非常糟糕的做法(第一次调用中的过时值)