LockSupport工具类简单介绍

LockSupport是一个用于阻塞/唤醒线程的工具类,LockSupport和每个使用它的线程都会关联一个许可证,而且默认情况下的线程是没有这个许可证的。

LockSupport方法介绍

void park()

如果调用park()方法的线程拿到了和LockSupport关联的许可证,则会直接返回,否则会被阻塞挂起,直到调用unpark()方法后被阻塞的线程才会被恢复。

例如,下面的代码只有有两条输出语句:

当前线程调用unpark(thread)方法后...
线程thread调用park()方法前...

package juc;

import java.util.concurrent.locks.LockSupport;

/**
 * @author heyunlin
 * @version 1.0
 */
public class LockSupportExample {

    public static void main(String[] args) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                System.out.println("线程thread调用park()方法前...");
                LockSupport.park();
                System.out.println("线程thread调用park()方法后...");
            }
        };

        thread.start();

        // LockSupport.unpark(thread);
        System.out.println("当前线程调用unpark(thread)方法后...");
    }

}

执行完代码LockSupport.park()后,子线程thread会被挂起,只有其他线程调用unpark(thread)方法,线程thread才能恢复并打印:线程thread调用park()方法后...

上面的代码取消注释之后,再次运行将会打印三次然后结束程序的运行。

void unpark(Thread)

这个方法的作用是让指定的线程获得许可证,所以先调用unpark()方法,再调用park()方法,线程并不会被挂起,而是直接返回。

例如,下面两条输出语句都会执行。

package juc;

import java.util.concurrent.locks.LockSupport;

/**
 * @author heyunlin
 * @version 1.0
 */
public class LockSupportExample {

    public static void main(String[] args) {
        Thread thread = Thread.currentThread();

        LockSupport.unpark(thread);
        
        System.out.println("当前线程调用park()方法前...");
        LockSupport.park();
        System.out.println("当前线程调用park()方法后...");
    }

}

你可能感兴趣的:(java,开发语言)