多线程的特性

1.原子性:

       一个操作或者多个操作,要么全部执行成功,要么全部执行失败。比如账户转账问题,A账户向B转100,A账户减去100元,B账户加上一百元,这两个操作必须具备原子性,才能保证数据的安全,所以需要锁来保证数据的原子性

2.可见性:

   当一个线程修改变量之后,其他线程能够立即看见修改到的值。比如有两个线程a,b,两个共有变量i,线程a修改了i的值,没有及时刷新到主存,线程b看到还是修改之前的值。这就是线程的可见性的问题。

3.有序性:

程序执行的顺序按照代码的先后顺序执行。一般来说处理器为了提高程序的执行效率,可能会对输入的代码进行优化,

它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。如下:

int a = 10;    //语句1

int r = 2;    //语句2

a = a + 3;    //语句3

r = a*a;     //语句4

则因为重排序,他还可能执行顺序为 2-1-3-4,1-3-2-4

但绝不可能 2-1-4-3,因为这打破了依赖关系。
显然重排序对单线程运行是不会有任何问题,而多线程就不一定了,所以我们在多线程编程时就得考虑这个问题了。

原文地址:https://www.cnblogs.com/startSeven/p/10217442.html