JUC——线程同步锁(LockSupport阻塞原语)

2018-06-18 01:23:58来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  java.util.concurrent.locks.LockSupport这个是一个独立的类,这个类的主要功能是用来解决Thread里面提供的suspend()(挂起线程)、resume()(恢复运行)方法,这个两个方法的本质上会存在有死锁的嫌疑,所以从JDK1.4开始将其就已经列为不建议使用的方法了。但是在JDK1.5开发JUC框架之后,考虑到JUC框架之中的各种实现机制时开始试图还原之前被废弃的操作,于是就有了LockSupport这个类。

  这个类里面有两个方法:

  • 挂起
 public static void park(Object blocker) {
    Thread t = Thread.currentThread();
    setBlocker(t, blocker);
    unsafe.park(false, 0L);
    setBlocker(t, null);
}
  • 恢复
public static void unpark(Thread thread) {
    if (thread != null)
        unsafe.unpark(thread);
}

 

范例:观察挂起与恢复执行

package so.strong.mall.concurrent;
import java.util.concurrent.locks.LockSupport;

public class LockSupportDemo {
    private static String msg = null;
    public static void main(String[] args) {
        final Thread mainThread = Thread.currentThread(); //获取当前线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    msg = "itermis.com";
                } finally {
                    LockSupport.unpark(mainThread); //不管线程的操作如何,都要解除挂起状态
                }
            }
        }).start();
        LockSupport.park(mainThread);
        System.out.println("**********主线程执行完毕,msg=" + msg);
    }
}
**********主线程执行完毕,msg=itermis.com

  

  

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:ZAB协议(Zookeeper atomic Broadcast)

下一篇:spring cloud 入门系列五:使用Feign 实现声明式服务调用