互斥锁

并发专栏  多线程  java  并发编程

  

2020-11-08 12:20:37

文章目录 一.原子问题 二.锁模型 三.解决方案 2.1 synchronized 四.保护资源 4.1 关系简介 4.2 保护没有关联关系的多个资源 4.3 保护有关联关系的多个资源 4.4 小结 一.原子问题 在并发编程Bug源头中介绍过,原子问题的源头是线程切换,解决方案禁用线程切换。 CPU控制线程切换,无论单核CPU还是多核CPU,保证同一时刻只有一个线程执行,称为互斥,就能够保证对共享...

Lock和Condition

并发专栏  java  并发编程  多线程

  

2020-11-16 06:28:23

文章目录 一.简介 二.原理 2.1 管程 2.2 可见性 2.3 可重入锁 2.4 公平锁与非公平锁 2.5 用锁的最佳实践 2.6 示例 一.简介 Java SDK并发包通过Lock和Condition两个接口来实现管程,其中Lock用于解决互斥问题,Condition 用于解决同步问题。 二.原理 2.1 管程 在 Java 的 1.5 版本中,synchronized 性能不如 SDK 里...

Java并发Semaphore

并发专栏  多线程  java  并发编程

  

2020-11-17 03:00:47

文章目录 一.信号量 二.信号量模型 三.使用信号量 3.1 示例-累加器 3.2 示例-限流器 一.信号量 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 二.信号量模型 概况为:一个计数器,一个等待队列,三个方法。在信号模型里,计数器和等待队列对外是透明 ,...

文章目录 一.简介 二.内存模型 三.Happens-Before 规则 3.1 规则 3.2 final 一.简介 JMM是一个规范,感兴趣可以查看JSR113标准,描述了JVM平台上多线程程序的语义,具体包括一个线程对共享变量的写入何时能被其他线程“看到”。 二.内存模型 当指令在CPU上运行的时候,会先将运算需要的数据从内存中复制一份到CPU的高速缓存当中,那么CPU...

死锁

并发专栏  java  多线程  并发编程  设计模式

  

2020-11-14 07:53:09

文章目录 一.简介 二.预防死锁 2.1 破坏占用且等待条件 2.2 破坏不可抢占条件 2.3 破坏循环等待条件 2.4 小结 一.简介 根据上一篇文章互斥锁 死锁实验,死锁定义:一组互相互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。 我们假设线程 T1 执行账户 A 转账户 B 的操作,账户 A.transfer(账户 B);同时线程 T2 执行账户 B 转账户 ...

1)现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用 join 方法实现。 详解:https://www.cnblogs.com/zhuyeshen/p/11005222.html 2)在 Jav...