多线程
&如歌的行板&
java实习生
展开
-
AQS源码笔记
AQS简介 AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。 AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS原创 2020-09-25 14:29:42 · 132 阅读 · 0 评论 -
多线程依赖问题
遇到一个面试题: 3个线程A,B,C存在依赖关系,B依赖A执行结束,C依赖B执行结束,请设计实现。 具体实现如下: 首先,创建一个锁对象: @Data public class LockFlag { private int flag = 0; } 线程A的实现代码 public class Ajob extends Thread { private LockFlag lockFl...原创 2020-04-30 22:44:54 · 1487 阅读 · 0 评论 -
通过例子理解多线程死锁
多线程死锁 通过一个例子引入死锁的概念。 古代钱庄,通过手写记账记录账户余额,现在客户A用一个账本A,客户B有个账本B,这些账本统一放在文件架上。 现在来了一个客户 需要从A账户装500到B账户。这个时候柜员拿账本的时候会有以下情况: A,B账本都在文件架上,柜员全部拿走。 文件架上只有A账本,柜员拿走,并且等待其他柜员把B账本送过来。 转出账本A与转入账本B都不在文件架上,柜员等待其他柜员送过...原创 2020-04-17 14:34:10 · 160 阅读 · 0 评论 -
并发的源头:可见性,原子性,有序性
并发的源头 可见性 原子性 有序性 共享数据 可见性 可见性是由于CPU的高速缓存导致的,当线程A操作内存上的变量时,存到CPU缓存中的,当线程B去拿数据时候,不能够读到线程A CPU缓存数据 ,导致结果不一致。该问题为可见性问题 可见性的 解决方案是,在共享变量上加 volatile关键字 原子性 原子性是由于CPU的时间切片导致,当一个共享变量count = 0,执行代码count +...原创 2020-04-16 14:29:54 · 157 阅读 · 0 评论