首先我们需要先了解一下,在并发编程中的三大原则:
- 保证原子性
- 保证有序性
- 保证可见性
三面三大原则,都是在保证的是,多线程情况下,操作共享变量。如果每一个线程都自己玩自己的那就不会有线程安全问题,也就不会出现,所谓的并发编程的三大原则问题。所以在早年很老的计算机只有单核CPU的时候,这个问题就不会存在,因为,所有线程到CPU执行的时候,都是串行在执行,压根就不会出现并行的情况,我们感觉像是同时在执行,是因为CPU执行效率非常快在很短很短的时间内,来回切换不同的线程在执行。
我们首先来理解一下,上面的三个原则是什么意思:
1,保证原子性,就是在代码执行的过程中不能被,打断直到我执行流程完成。
这个就是好比,一个正在演讲的人,拿着话筒(现场共同享有),你不在他演讲的时候把话筒拿开,如果你把话筒给拿开了,他就无法保证这场演讲的流程是一个完整的流程。你需要用话筒的话,你需要等我用完,放回去了你在用,你能不能用的上,那就看你能不能抢到了。这个其实就是一个保证原子性的很好的例子。
2,保证有序性,就是在代码执行的过程中,你不能乱序执行,只需要按照,字节码的顺序,逐行执行,要不然就会出错。
那还是拿演讲来说,找场地,调试灯光,调试设备,调试其他的一些东西,等这些东西都已经弄好了,然后演讲人才能上台,拿着话筒开始演讲,你不能再什么都没有的情况下,直接让演讲人就开始,演讲,那这个样子不就会出现各种,问题吗。
3,可见性,可见性是什么意思呢,因为在,多线程共享,变量的情况下,每一个线程,都会吧共享变量给拷贝到自己的工作内存中,这样线程之间的变量就变成不可见的了。那这样的话,在操作完共享变量的时候,其他线程还是无法知道最新的值是什么,而在多线程中,在操作完共享变量后,其他线程必须可见。
还是演讲的问题,在整个会场,只有一个话筒,但是这个话筒呢电量不足了,工作人员和演讲者,就是两条不同的线程,他们分别拿着话筒,工作人员是去换电池去了,演讲者拿着上台做演讲了,电池最多只能用5分钟,工作人员在后台换了电池后,赶紧把已经换好电的话筒给放了回去,那么这个时候,如果他们两个是不可见的话,演讲者压根就不知道,话筒已经换好电池了,他还在用那个没有换电池的话筒,那永不了多久就会出现各种状况了。
上面是对并发编程三大原则的解释跟理解