LockSupport.park() 和 LockSupport.unpark() 不用在 synchronized 代码块中调用;如果 unpark 可以在 park 之前执行,则 park 不会等待,而是继续向下执行;还有就是 unpark 唤醒线程更加精确。
每个线程都有自己的一个 Parker 对象,由三部分组成 _counter、 _cond 和 _mutex.
当线程调用 park() 方法时,先检查 _counter,如果为 0,则获得 _mutex 然后进入 _cond 阻塞,最后在设置 _counter = 0;
当别的线程调用 unpark 方法唤醒指定线程时,先将 _counter = 1,然后将 _cond 中阻塞的线程唤醒,最后设置 _counter = 0;