多线程编程中的三个核心概念
1.原子性 2.可见性 3.顺序性
**原子性:**一条船上的人,要么都上岸,要么都玩完。
举个例子转账。1.减少你的金额 2.增加被转账人的金额。这两部就属于一个原子操作,也叫作事务。如果减了你的钱,没有给被转账人增加钱,你肯定不高兴。如果扣除你钱失败,给被转账人增加钱成功,银行也会不高兴。所以要么这两个都成功,要么这两个都失败,大家才会都高兴。大家高兴才是真的高兴。
**可见性:**别偷摸的,让大家都瞅瞅。
多线程并发访问同一个变量时,某一线程对该变量进行修改,其它线程应立即共享到此信息。
问题:读取时间不同,缓存以后写回主内存的时间不可预期,故线程读取到了变量的改变,但是取值时可能无法取到最新的值奥!
顺序性 jvm说的算哈哈哈哈哈哈哈。
吾等粗鄙之人无法悟透代码执行效率,代码执行的时候并不是按照我们的代码顺序执行的,jvm会对它进行优化,cpu按照优化的顺序执行。老子写的代码竟然不按照老子写的顺序执行??????不过不用担心cpu最后会保证执行结果和代码顺序执行时的结果一致的奥