在同步组件中,当须要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工做。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具。并发
LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread thread) 方法来唤醒一个被阻塞的线程。工具
在Java 6中,LockSupport增长了park(Object blocker)、parkNanos(Object blocker,long nanos) 和parkUntil(Object blocker,long deadline)3个方法,用于实现阻塞当前线程的功能,其中参数 blocker是用来标识当前线程在等待的对象(如下称为阻塞对象),该对象主要用于问题排查和系统监控。由于当线程阻塞(使用synchronized关键字)在一个对象上时,经过线程dump可以 查看到该线程的阻塞对象,方便问题定位,而Java 5推出的Lock等并发工具时却遗漏了这一 点,导致在线程dump时没法提供阻塞对象的信息。所以,在Java 6中,LockSupport新增了上述3 个含有阻塞对象的park方法,用以替代原有的park方法。spa