并发工具类之 LockSupport

x33g5p2x  于2021-12-18 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(211)

当需要阻塞或唤醒一个线程的时候,我们可以使用 LockSupport 工具类来完成,它提供的部分方法如下图:

测试代码如下:

public class TestLockSupport {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println(i);
                if (i == 5) {
                    // 阻塞当前线程
                    LockSupport.park();
                }
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        try {
            TimeUnit.SECONDS.sleep(8);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("现在是 8 秒后");
        // 唤醒指定的线程,并且 unpark 可以再 park 前调用
        LockSupport.unpark(thread);
    }
}

控制台输出如下:

0
1
2
3
4
5
现在是 8 秒后
6
7
8
9

相关文章