1. // 暂停当前线程
    2. LockSupport.park();
    3. // 恢复某个线程的运行
    4. LockSupport.unpark(暂停线程对象)

    LockSupport基本使用 - 图1
    先 park 再 unpark

    1. Thread t1 = new Thread(() -> {
    2. log.debug("start...");
    3. sleep(1);
    4. log.debug("park...");
    5. LockSupport.park();
    6. log.debug("resume...");
    7. },"t1");
    8. t1.start();
    9. sleep(2);
    10. log.debug("unpark...");
    11. LockSupport.unpark(t1);

    输出

    18:42:52.585 c.TestParkUnpark [t1] - start... 18:42:53.589 c.TestParkUnpark [t1] - park... 18:42:54.583 c.TestParkUnpark [main] - unpark... 18:42:54.583 c.TestParkUnpark [t1] - resume...

    先 unpark 再 park

    1. Thread t1 = new Thread(() -> {
    2. log.debug("start...");
    3. sleep(2);
    4. log.debug("park...");
    5. LockSupport.park();
    6. log.debug("resume...");
    7. }, "t1");
    8. t1.start();
    9. sleep(1);
    10. log.debug("unpark...");
    11. LockSupport.unpark(t1);

    输出

    1. 18:43:50.765 c.TestParkUnpark [t1] - start...
    2. 18:43:51.764 c.TestParkUnpark [main] - unpark...
    3. 18:43:52.769 c.TestParkUnpark [t1] - park...
    4. 18:43:52.769 c.TestParkUnpark [t1] - resume...