LockSupport原理

阅读更多
LockSupport原理


在Java语言中,每一个对象有一把锁。(每个对象都有自己的等待队列用来存放等待的线程)
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
https://www.cnblogs.com/mingyao123/p/7424911.html


//--------------
连接是通过阻塞队列的方式进行存放的,一个存放空闲的连接,另一个存放使用着的连接

阻塞队列的实现是通过wait/notify方式实现的

锁的阻塞实现是通过LockSupport来实现的


//--------------
LockSupport 提供park()和unpark()方法实现阻塞线程和解除线程阻塞


LockSupport和每个使用它的线程都与一个许可(permit)关联


park就是挂起线程(更改线程运行状态),


LockSupport使用方式和wait/notify很类似


LockSupport是以线程为单位进行阻塞和唤醒,wait/notify是以对象为单位进行阻塞和唤醒,也可以一次唤醒被这个对象阻塞的线程(notifyAll)



unpark可以先于park进行调用,因为这个特点,我们可以不用担心挂起和恢复时序问题

LockSupport阻塞和唤醒线程直接操作的就是线程,所以从语义上讲,它更符合常理,或者叫更符合语义。而Object的wait/notify它并不是直接对线程操作,它是被动的方法,它需要一个object来进行线程的挂起或唤醒。

你可能感兴趣的:(LockSupport原理)