多线程知识点

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

  • 调用tryAcquire方法尝试获取锁,获取成功的话修改state并直接返回true,获取失败的话把当前线程加到等待队列中
  • 加到等待队列以后先检查前置节点状态是不是signal,若是是的话直接阻塞当前线程等待唤醒,若是不是的话判断是不是cancel状态,是cancel状态就往前遍历并把cancel状态的节点从队列中删除。若是状态是0或者propagate的话将其修改为signal
  • 阻塞被唤醒以后若是是队首而且尝试获取锁成功就返回true,不然就继续执行前一步的代码进入阻塞

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

相关文章
相关标签/搜索