C/C++教程

LockSupport

本文主要是介绍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();
这篇关于LockSupport的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!