我在本系列的第一篇文章如下
http://bytes.com/topic/java/insights...ls-article-1-a在这里我将讨论更多的事情
1>
Java中哪些操作是原子操作 ?Ans:写入volatile,写入引用,并写入32位或更小的标量值。 尽管这些操作之一是由线程开始执行的,但该线程必须在其他任何线程尝试写入同一变量之前完成该操作。 因此,这些分配操作可以在代码中的任何位置使用,而不会由于中间线程冲突而产生任何垃圾值。
2>
写入是否立即对另一个线程可见 ?回答:如果一个线程T1的写操作之后是另一个线程T2的读操作,那么T2是否会看到T1所写的值并不明显。 因为T1可能会从其本地缓存中读取该值,这是一个旧值。
3>
如何使其可见 ?回答:如果变量是易失性的,那么T2将始终看到T1写入的值。
4>
当由多个线程访问时,哪个操作可能会产生垃圾值 ?Ans。 写入非易失性64位值(即,长整型和双精度型)。
5>
为什么需要同步 ?Ans。 假设有4个代码块(snipet),我们永远不希望被多个线程执行。 这意味着当线程T1正在执行这些块中的任何一个时,则同一块或其他3个块中的任何一个都将不会由任何其他线程T2执行。 T2必须等到T1完成。 当T1完成时,只有T2会进入这4个块中的任何一个并执行。
6>
这是如何完成的 ?Ans。 这是用单词来完成的
同步关键字。需要按以下方式创建任何A类的对象。
A obj = new A();
然后所有这些代码块都需要如下封装
synchronized(obj){
//Code block: i.e. Lines of code follows
}
From: https://bytes.com/topic/java/insights/951658-java-threads-more-memory-model
本文探讨了Java中原子操作的细节,如volatile变量、引用及32位或更小标量值的写入。深入解析了写入操作的线程间可见性问题,以及如何通过易失性变量确保一致性。揭示了64位非易失性值写入可能产生的垃圾值,以及为何需要同步机制来防止多线程冲突。

被折叠的 条评论
为什么被折叠?



