目录
2.LockSupport.unpark(线程对象):唤醒某一个指定的线程
3.扩展:LockSupport.parkUntil(long)等待最大时间是一个固定时间
②二者在不传递参数的情况下,都会让线程进入WAITING无限期等待状态。
①LockSupport使用时不需要加锁,不需要配合synchronized一起使用;而wait需要配合synchronized一起使用。
②LockSupport不会抛出Interrupt的异常,而wait会。
③LockSupport可以指定某一个线程进行唤醒,而wait和notify不行。
有wait和notify是因为sleep只能到点之后再被唤醒,不能主动唤醒。
上述方法的问题:在调用notify时会随机唤醒,无法唤醒指定的某一个线程,不能把握线程唤醒的顺序。
使⽤ LockSupport 也可以使线程休眠和唤醒,它包含两个主要的⽅法↓
注:LockSupport 无需配合 synchronized 使用。
1.LockSupport.park():休眠当前线程
import java.util.concurrent.locks.LockSupport;
public class LockSupportDemo1 {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
System.out.println("线程1:开始执行");
LockSupport.park();
System.out.println("线程1:结束执行");
},"线程1");
t1.start();
}
}


2.LockSupport.unpark(线程对象):唤醒某一个指定的线程
import java.util.concurrent.locks.LockSupport;
public class LockSupportDemo1 {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
System.out.println("线程1:开始执行");
LockSupport.park();
System.out.println("线程1:结束执行");
},"线程1");
Thread t2 = new Thread(() -> {
System.out.println("线程2:开始执行");
LockSupport.park();
System.out.println("线程2:结束执行");
},"线程2");
Thread t3 = new Thread(() -> {
System.out.println("线程3:开始执行");
LockSupport.park();
System.out.println("线程3:结束执行");
},"线程3");
t1.start();
t2.start();
t3.start();
Thread.sleep(1000);
System.out.println();
LockSupport.unpark(t1); //唤醒线程1开始执行
Thread.sleep(1000);
LockSuppo

LockSupport是Java并发工具类,提供park()和unpark()方法来控制线程的休眠和唤醒,无需加锁。与wait/notify不同,LockSupport不抛出InterruptedException,且能指定唤醒特定线程。此外,parkUntil()允许设置最大等待时间。文章对比了LockSupport与wait的异同,并介绍了线程休眠的多种方式。
最低0.47元/天 解锁文章

1万+

被折叠的 条评论
为什么被折叠?



