das*_*h1e 13
看看Javadoc的park()方法:
除非许可证可用,否则禁用当前线程以进行线程调度.如果许可证可用,那么它被消耗并且呼叫立即返回; 否则当前线程因线程调度而被禁用,并且在发生以下三种情况之一之前处于休眠状态:
其他一些线程以当前线程作为目标调用unpark; 或其他一些线程中断当前线程; 或虚假的呼叫(即无缘无故)返回.此方法不会报告这些方法中的哪一个导致返回.呼叫者应该首先重新检查导致线程停放的条件.例如,呼叫者还可以在返回时确定线程的中断状态.
因此停放的线程是使用阻塞的线程LockSupport.park().
Park() 和 wait() 都会导致线程被禁用。使已禁用的线程再次处于活动状态取决于其禁用方式。
\n\n已通过调用禁用的线程LockSupport.park()将保持禁用状态,直到:
unpark(),或者interrupt(),或者通过调用 Object 的wait() \xe2\x80\x93\xc2\xa0(相当于调用wait(0)\xe2\x80\x93)禁用的线程将保持禁用状态,直到:
notify()或notifyAll(), 或interrupt()已禁用的线程在Java中,通过调用方法而停放的LockSupport.park()线程是等待线程(在Thread.state.WAITING)。
请参阅Thread.state.WAITING的 Java 文档。
有3种方法可以使线程处于WAITING状态:
处于等待状态的线程正在等待另一个线程执行特定操作。
例如,对某个对象调用了 Object.wait() 的线程正在等待另一个线程对该对象调用 Object.notify() 或 Object.notifyAll()。调用 Thread.join() 的线程正在等待指定线程终止。