欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

多线程的特性

程序员文章站 2023-03-31 20:46:01
1.原子性: 一个操作或者多个操作,要么全部执行成功,要么全部执行失败。比如账户转账问题,A账户向B转100,A账户减去100元,B账户加上一百元,这两个操作必须具备原子性,才能保证数据的安全,所以需要锁来保证数据的原子性 2.可见性: 当一个线程修改变量之后,其他线程能够立即看见修改到的值。比如有 ......

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,因为这打破了依赖关系。
显然重排序对单线程运行是不会有任何问题,而多线程就不一定了,所以我们在多线程编程时就得考虑这个问题了。