文章目录
一、前言
在多线程的场景下,我们会经常使用加锁,来保证线程安全。如果锁用的不好,就会陷入死锁,我们以前可以使用Object的wait/notify来解决死锁问题。也可以使用Condition的await/signal来解决,当然最优还是LockSupport的park/unpark。他们都是解决线程等待和唤醒的。下面来说说具体的优缺点和例子证明一下。
二、wait/notify的使用
1. 代码演示
public class JUC {
static Object lock = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized (lock) {
// 1
System.out.println(Thread.currentThread().getName() + "进来");
try {
// 释放锁,陷入阻塞,直到有人唤醒
lock.wait();
} catch (Exception e) {
e.printStackTrace();
}
}// 1
System.out.println(Thread.currentThread().getName() + "我被唤醒了");
}, "A").start();
new Thread(()->{
synchronized (lock) {
// 2
lock.notify();
System.out.println(Thread.currentThread().getName() + "随机唤醒一个线程");
}// 2
}, "B").start();
}
}
2. 执行结果

Java多线程:wait/notify、await/signal与LockSupport的深度解析

本文详细介绍了Java中wait/notify、await/signal以及LockSupport的使用,包括它们的原理、代码演示、执行结果以及对比分析。重点阐述了它们在多线程同步中的应用,并通过实例展示了如何解决线程等待和唤醒的问题。最后,总结了各自的特点和适用场景,并给出了相关面试题及解答。
最低0.47元/天 解锁文章
978

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



