在之前的分享中,提到了多线程的类加载机制,说道了线程上下文类加载器,也介绍关于多线程中的内存使用情况,提到了一个关键字volatile,介绍了CPU的缓存机制,介绍了Java内存模型。
下面就来介绍一下并发编程中的最为中要的三个特点。
并发编程三大特性
原子性
所谓的原子性在之前的博客中或者是在网上其他资料上都有所提及到。是指在一次的操作或者多次的操作过程中,要么所有的需要的操作全部都执行,要么就是所有的操作全不执行。例如:在执行一个账户的转账操作的时候,需要进行的步骤是A账户的钱减少,而B账户的钱增加。那么这个操作就需要两边都执行成功,不能出现A账户的钱减少而B账户的钱没有增加,或者说是A账户钱没有发生变化而B账户的钱发生了变化。
其实在我们编程操作的过程中,例如一条简单的赋值语句,如果没有保证原子性操作的话就会导致数据的错误。但是有时候会遇到一种情况就是两个原子性的操作合在一起并不一定是原子性的。在Java中volatile关键字不是用来保证原子性的,synchronized关键字可以保证原子性。当然从JDK1.5开始提供了很多的保证原子性的变量。这些原子性的变量就可以保证原子性操作。
可见性
多线程之间的可见性是指,当一个线程对共享变量进行修改