LockSupport
是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。
接下面我来看看LockSupport
有哪些常用的方法。主要有两类方法:park
和unpark
。
为什么叫park呢,park英文意思为停车。我们如果把Thread看成一辆车的话,park就是让车停下,unpark就是让车启动然后跑起来。
以下代码,运用LockSupport 将"abcdefg" 与 "1234567" 间隔打印出来:
package cn.dinner.study;
import java.util.concurrent.locks.LockSupport;
public class LockSupportTest {
static Thread t1 = null,t2 = null;
public static void main(String[] args) {
char [] aa = "abcdefg".toCharArray();
char [] mm = "1234567".toCharArray();
t1 = new Thread(() -> {
for(char a:aa){
System.out.println(a);
LockSupport.unpark(t2);
LockSupport.park();
}
});
t2 = new Thread(() -> {
for(char m:mm){
LockSupport.park();
System.out.println(m);
LockSupport.unpark(t1);
}
});
t1.start();
t2.start();
}
}
以下是jdk的官方文档:
另:
park和unpark
可以实现类似wait和notify
的功能,但是并不和wait和notify
交叉,也就是说unpark
不会对wait
起作用,notify
也不会对park
起作用。park和unpark
的使用不会出现死锁的情况