Java多线程编程基础三(原子性,可见性和有序性)
文章引用: 1 https://www.jianshu.com/p/cf57726e77f2 2 https://blog.csdn.net/eff666/article/details/66473088 当前文章可以结合下面链接一起了解一下: https://blog.csdn.net/u013412772/article/details/80107643 在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。 一、原子性 即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。原子性就像数据库里面的事务一样,他们是一个团队,同生共死。 一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。试想一下,如果这2个操作不具备原子性,会造成什么样的后果。假如从账户A减去1000元之后,操作突然中止。然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作。这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元。 所以这2个操作必须要具备原子性才能保证不出现一些意外的问题。同样地反映到并发编程中会出现什么结果呢?举一个简单的例子: i = 0 ; //1 j = i ; //2 i++; //3