java的LockSuopport类是一个基础工具类,多用来构建并发工具锁时使用,它的方法不多,由下图可知它的方法都是静态的,并且代码量很小,每个方法只有几行,基本都是使用的sun.misc.Unsafe来实现的,而Unsafe是一个jdk未公开的类,LockSupport算是绕过了代码权限供开发人员安全使用Unsafe的一个代替工具
LockSuopport在构建其他锁的类时经常使用的方法是park()方法与unPark()方法,
park()
public static void park(Object blocker) {
Thread t = Thread.currentThread();
setBlocker(t, blocker);
UNSAFE.park(false, 0L);
setBlocker(t, null);
}
这个方法用来对blocker这个对象进行加锁阻塞,阻塞的线程是调用park方法所在线程
unPark()与其相对,是一个解锁方法,传入的参数为Thread对象
public static void unpark(Thread thread) {
if (thread != null)
UNSAFE.unpark(thread);
}