美文网首页
(1)线程与锁

(1)线程与锁

作者: 阿呆酱的算法工程师之路 | 来源:发表于2017-09-18 13:42 被阅读12次

互斥与内存模型

互斥:用锁保证某一时间仅有一个线程可以访问数据。但是互斥也会带来麻烦,比如竞态条件和死锁。

创建线程

在java中,并发的基本单元是线程,可以将线程看作控制流。线程之间通过共享内存进行通信。

创建线程

我运行的结果有两种:

1 2

第一把锁

例子1

运行这段代码,每次都获得不同的结果,原因是:两个线程使用counter.cout时发生了竞态条件(代码行为取决于各操作的时序)

java编译器对++count的解释,字节码如下:

字节码 解释

竞态条件的解决方案是对count进行同步(synchromized)访问,一种方法是使用Java对象原生的内置锁(也称为互斥锁(mutex)、管程(monitor)或临界区(critical section))来同步多increment()的调用:

改1 分析

再看一个例子:

例子2 分析2

内存可见性

Java内存模型定义了何时一个线程对内存的修改对另一个线程可见。基本原则是,如果读线程和写线程不进行同步,就不能保证可见性。

相关文章

  • Java中的锁之乐观锁与悲观锁

    1、 分类一:乐观锁与悲观锁 a)悲观锁:认为其他线程会干扰本身线程操作,所以加锁 b)乐观锁:认为没有其他线程会...

  • 公平锁和非公平锁-ReentrantLock是如何实现公平、非公

    1、什么是公平锁与非公平锁 公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。非公平锁:非...

  • 4.0.6.守护线程,线程死锁

    守护线程会随着主线程的结束而结束DaemonThread 线程 1, 线程 2,锁1,锁2 线程1 有锁1,想拿锁...

  • (1)线程与锁

    互斥与内存模型 互斥:用锁保证某一时间仅有一个线程可以访问数据。但是互斥也会带来麻烦,比如竞态条件和死锁。 创建线...

  • iOS开发之多线程(一)

    目录 概要 NSThread GCD NSOperation 多线程与锁 1.概要 进程 线程 多线程 多线程的原...

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • 死锁

    什么是死锁 简单的说:线程1持有A锁,线程2持有B锁;线程1尝试获取B锁,线程2尝试获取A锁。两个线程各持有了一把...

  • iOS中各种锁的性能对比

    自旋锁 与 互斥锁 自旋锁 (spin lock): 如果一个线程需要获取自旋锁,该锁已经被其他线程占用,该线程不...

  • 深入理解AQS(二)- 共享模式

    共享锁与独占锁 独占锁被某个线程持有时,其他线程只能等待当前线程释放后才能去竞争锁,而且只有一个线程能竞争锁成功。...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

网友评论

      本文标题:(1)线程与锁

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