safepoint 安全点顾名思义是指一些特定的位置,当线程运行到这些位置时,线程的一些状态能够被肯定(the thread's representation of it's Java machine state is well described),好比记录OopMap的状态,从而肯定GC Root的信息,使JVM能够安全的进行一些操做,好比开始GC。
java
线程间通讯 安全
wait等待 , notify 唤醒进入阻塞队列多线程
https://juejin.im/entry/5a2bb783f265da43163cff74框架
http://ifeve.com/java-special-troops-aqs/oop
公平锁, 非公平锁 ,非公平锁效率高,公平锁效率低。ui
lock.net
release线程
1. 修改状态位
2. 唤醒排队的节点
3. 结合lock方法,被唤醒的节点会自动替换当前节点成为head对象
http://ifeve.com/juc-aqs-reentrantlock/blog
多线程
线程的状态
https://xiaogd.net/java-%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81%E4%B9%8B-waiting/ 线程状态好文
lock
,同时也支持公平锁与非公平锁。所谓的公平与非公平指的是在请求前后顺序上,先对锁进行请求的就必定先获取到锁,那么这就是公平锁,反之,若是对于锁的获取并无时间上的前后顺序,如后请求的线程可能先获取到锁,这就是非公平锁,通常而言非,非公平锁机制的效率每每会赛过公平锁的机制,但在某些场景下,可能更注重时间前后顺序,那么公平锁天然是很好的选择。
---------------------
aqs
AQS工做原理概要
AbstractQueuedSynchronizer又称为队列同步器(后面简称AQS),它是用来构建锁或其余同步组件的基础框架,内部经过一个int类型的成员变量state来控制同步状态,当state=0时,则说明没有任何线程占有共享资源的锁,当state=1时,则说明有线程目前正在使用共享变量,其余线程必须加入同步队列进行等待,AQS内部经过内部类Node构成FIFO的同步队列来完成线程获取锁的排队工做,同时利用内部类ConditionObject构建等待队列,当Condition调用wait()方法后,线程将会加入等待队列中,而当Condition调用signal()方法后,线程将从等待队列转移动同步队列中进行锁竞争。注意这里涉及到两种队列,一种的同步队列,当线程请求锁而等待的后将加入同步队列等待,而另外一种则是等待队列(可有多个),经过Condition调用await()方法释放锁后,将加入等待队列
---------------------
lock与sync区别
synchronized与Lock的区别
https://blog.csdn.net/u012403290/article/details/64910926
AQS 详细解析 特别好文
https://blog.csdn.net/Luxia_24/article/details/52403033 !!!
wait()与sleep()的区别
简单来讲wait()会释放对象锁而sleep()不会释放对象锁。这些问题有不少的资料,再也不赘述。
锁升级降级
https://blog.csdn.net/aitangyong/article/details/38315885
lock原理
aqs 判断是否获取锁, 获取过锁则stat++
https://blog.csdn.net/Luxia_24/article/details/52403033