LockSupport

LockSupport是优化版的等待和唤醒机制

  1. wait 和 notify 需要和 synchronized 结合使用
  2. await 和 signal 需要和 Lock 结合使用
  3. 它们都必须是先等待再唤醒
  4. LockSupport可以单独使用, 直接唤醒指定的线程,而且跟顺序无关,可以先 unpart 再park

底层原理

调用的是底层Unsafe类的native 方法
每个线程都最多只会有一个许可证关联,调用多次不会累加
调用一次park 会消费permit

Thread a = new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(3L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "----come in ");
            LockSupport.park();
            System.out.println(Thread.currentThread().getName() + "----被唤醒");
        }, "AA");
        a.start();

        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "----come in ");
            LockSupport.unpark(a);
            System.out.println(Thread.currentThread().getName() + "----通知了");
        }, "BB").start();
posted @ 2021-09-04 04:41  紫川先生  阅读(53)  评论(0编辑  收藏  举报