美文网首页
多线程编程中三个特性

多线程编程中三个特性

作者: wangzaiplus | 来源:发表于2017-09-17 16:34 被阅读0次

文章参考自:链接

多线程编程要确保并发程序正确地执行,必须要保证原子性、可见性以及有序性,缺一不可,不然就可能导致结果执行不正确。

1. 原子性

即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

一个很经典的例子就是银行账户转账问题:比如从账户 A 向账户 B 转 1000 元,那么必然包括 2 个操作:从账户 A 减去 1000 元,往账户 B 加上 1000 元。这 2 个操作必须要具备原子性才能保证不出现一些意外的问题。

我们操作数据也是如此,比如 i = i+1;其中就包括,读取 i 的值,计算 i,写入 i。这行代码在Java中是不具备原子性的,则多线程运行肯定会出问题,所以也需要我们使用同步和 lock 这些东西来确保这个特性了。

2. 可见性

当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

若两个线程在不同的 cpu,那么线程 1 改变了 i 的值还没刷新到主存,线程 2 又使用了 i,那么这个 i 值肯定还是之前的,线程 1 对变量的修改线程 2 没看到这就是可见性问题。

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

相关文章

  • 多线程编程中三个特性

    文章参考自:链接 多线程编程要确保并发程序正确地执行,必须要保证原子性、可见性以及有序性,缺一不可,不然就可能导致...

  • 多线程全知道

    iOS中三种多线程编程技术分别是: NSThread Cocoa NSOperation GCD (全称: Gra...

  • java8新特性 CompletableFuture多线程并发异

    参考:java8新特性(九):CompletableFuture多线程并发异步编程https://blog.csd...

  • Java多线程实现

    导语 Java是一门为数不多的多线程支持的编程语言。 主要内容 掌握Java中三种多线程的实现方式 具体内容 如果...

  • OC-属性简介

    OC中,任何属性都有3种特性,分别是 1.多线程特性2.读/写特性3.内存管理特性 多线程特性 多线程特性有non...

  • 多线程编程

    多线程编程之Linux环境下的多线程(一)多线程编程之Linux环境下的多线程(二)多线程编程之Linux环境下的...

  • Java多线程(3)

    Java多线程(3) Java内存模型 并发编程的问题 为了保证数据的安全,需要满足以下三个特性: 原子性是指在一...

  • JAVA内存模型---JMM

    JAVA多线程编程是JAVA有别于C/C++的一大特性。最近在学习JAVA并发编程的艺术,遇到了很多问题,但是既然...

  • 程序猿学习书籍推荐

    深入理解Java虚拟机:JVM高级特性与最佳实践 java多线程编程核心技术 Effective Java中文版 ...

  • 多进程和多线程的应用场景

    其实,使用多线程编程还是使用多进程编程,有一个简单的原则,如果能使用多线程实现的,就用多线程,不能使用多线程实现的...

网友评论

      本文标题:多线程编程中三个特性

      本文链接:https://www.haomeiwen.com/subject/qnqmsxtx.html