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

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

  这个类里面有两个方法:bash

  • 挂起
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
相关文章
相关标签/搜索