高并发学习
文章平均质量分 94
JohnnyLin00
持续输出学习 持续发光 共同进步!
展开
-
Java高并发学习(七)——AQS及源码解析 详细图解哦!!
AQS及源码解析AQSAQS 是什么AQS 的作用为什么AQS 是JUC的基石AbstractQueuedSynchronizer源码分析AQS组成Node内部类Node类的内部结构Node类的属性含义AQS同步队列的基本结构int整型变量state以ReentrantLock非公平锁为例来理解 AQSAQSAQS 是什么通常的,AbstractQueueSynchronizer类简称AQS。AbstractQueueSynchronizer字面意思是: 抽象的队列 同步器抽象的,Abstr原创 2021-06-13 23:57:58 · 1907 阅读 · 2 评论 -
Java高并发学习(六)—— LockSupport
LockSupport理论LockSupport是什么?LockSupport是Java.util.concurrent.locks包下的一个类。是线程等待唤醒进制的(wait和notify)的改良版。LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport的park() 和unpark()作用分别是阻塞线程(相当于Object 的wait())和解除阻塞线程(相当于Object 的notify())。在学习LockSupport之前,我们知道2种让线程等待和唤原创 2021-06-13 16:24:42 · 273 阅读 · 0 评论 -
Java高并发学习(五)—— Java锁
Java锁公平锁与非公平锁理论如何创建区别可重入锁理论原理作用可重入验证验证synchronized验证Lock自旋锁(spinlcok)理论自己实现自旋锁公平锁与非公平锁理论公平锁: 就是按照多线程请求锁的顺序来获取锁。FIFO。与生活中的食堂排队打饭一样,遵循先来后到原则。非公平锁: 是指多个线程获取锁的顺序,并不是按照申请锁的顺序,有可能先申请的线程后得到锁,即允许插队(线程优先级翻转)或者线程饥饿(某个线程一直得不到锁)。如何创建通过ReentrantLock类的构造方法指定boole原创 2021-06-13 13:25:47 · 1281 阅读 · 1 评论 -
高并发学习笔记(四)—— CAS 和ABA问题
CAS什么是CAS变量valueOffSet表示该变量值在内存中的偏移地址,Unsafe类就是根据内存偏移地址来获取数据的。CAS1、unsafe类2、Unsafe,存在与rt.rar中的sun.misc包中,是CAS的核心类,由于Java方法无法直接访问底层系统,必须通过本地方法(C++方法)来访问。Unsafe相当于一个后门,基于该类可以直接操作特定内存的数据,其内部方法可以像C的指针一样直接操作内存。缺点:循环时间长,开销大。do{} while();只能保证一个共享变.原创 2021-06-12 21:58:33 · 321 阅读 · 1 评论 -
高并发学习(三) —— 集合线程安全、线程池
高并发学习(三) 线程安全的集合ArrayListHashSetHashMap常用辅助类CountDownLatchCyclicBarrierSemaphore读写锁阻塞队列线程池三种创建方式7大参数4种拒绝策略线程池原理线程安全的集合ArrayListList list = new ArrayList();线程不安全 会发生ConcurrentModificationException异常解决方案:1、vector线程安全。List list = new Vector<>();2、原创 2021-06-11 15:55:11 · 296 阅读 · 1 评论 -
高并发学习(二) —— JUC
JUCSynchronizedsynchronized的三种使用方式synchronized 修饰成员方法synchronized 修饰静态方法、代码块synchronized关键字底层实现原理售票例子JUCLock 接口售票例子synchronize和Lock 的区别线程之间的通信问题生产者 消费者问题使用JUCSynchronized并发编程的目的是为了提高程序的执行效率,提高程序的运行速度。但是并发编程功能还存在着一个致命问题:不同线程访问共享变量的同步问题。Java的Synchronized关原创 2021-06-11 14:31:53 · 181 阅读 · 1 评论 -
高并发学习(一)—— 进程、线程
interrupt 中断线程,但并没有真正的结束线程,所以一般用于中断正在休眠线程。如在主线程中调用t1.interrupt(),来中断t1线程的休眠。yield: 线程礼让。让出CPU,让其他线程执行,但礼让的时间并不确定,所以也不一定礼让成功。在准备礼让的线程调用Thread.yield();join: 线程插队。插队的线程一旦插队成功,则肯定先执行完插入线程的所有任务。比如在t2线程中调用,t1.join(),会先执行完t1的所有任务之后再 执行t2.用户线程: 也叫工作线程,当线程的任...原创 2021-06-11 12:03:26 · 162 阅读 · 1 评论