当前位置:网站首页>线程唤醒机制
线程唤醒机制
2022-07-31 05:41:00 【极速小乌龟】
一、wait和notify实现等待和唤醒
要在 synchronized 锁中使用,切先等待才能进行唤醒
Object object = new Object();
Thread t1 = new Thread(() -> {
synchronized (object) {
try {
System.out.println("================进入线程=============");
object.wait();
System.out.println("================线程被唤醒=============");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"t1");
t1.start();
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() ->{
synchronized (object){
object.notify();
System.out.println("进行唤醒==============");
}
},"t2").start();
二、await和signal实现等待和唤醒
需要在lock下使用,配合condition 实现,先等待才能进行唤醒
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
Thread t1 = new Thread(() -> {
lock.lock();
try{
System.out.println("=============进入方法==============");
condition.await();
System.out.println("=================线程被唤醒=================");
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}, "t1");
t1.start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() ->{
lock.lock();
try{
condition.signal();
System.out.println("=============唤醒操作================");
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
},"t2").start();
三、park和unpark实现等待和唤醒
unpark进行许可证的发布:最多只能发布一张许可证(不会累积)。如果一个方法出现两次LockSupport.park();就会出现问题。
基于LockSupport实现,无顺序要求,可以先park也可以先unpark。底层基于UNSAFE类实现
Thread t1 = new Thread(() -> {
System.out.println("===============进入线程执行=====================");
LockSupport.park();
System.out.println("===============线程被唤醒=====================");
}, "t1");
t1.start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() ->{
LockSupport.unpark(t1);
System.out.println("================进行唤醒==================");
},"t2").start();
边栏推荐
猜你喜欢
postgresql源码学习(34)—— 事务日志⑩ - 全页写机制
postgresql源码学习(33)—— 事务日志⑨ - 从insert记录看日志写入整体流程
Oracle入门 05 - VirtualBox的虚拟机安装配置
零样本学习&Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
【编程题】【Scratch三级】2022.03 冬天下雪了
讲解实例+详细介绍@Resource与@Autowired注解的区别(全网最全)
Debian 10 dhcp 服务配置
服务器和客户端信息的获取
项目练习——备忘录(增删改查)
Redux状态管理
随机推荐
浅层了解欧拉函数
第十七章:回溯探求指定入口的马步遍历,贪心无回溯探求马步遍历,递归探求nxm棋盘带障碍马步遍历
2.(1)栈的链式存储、链栈的操作(图解、注释、代码)
mysql索引失效的常见9种原因详解
gstreamer的caps event和new_segment event
青龙面板从零搭建教程
Oracle入门 06 - Windows 服务器安装配置
选择排序法
OSI七层模型
Redux状态管理
Basic usage of Koa framework
2022.7.29 数组
Zabbix入门
Exam Questions Previous True Questions Wrong Bills [The Fourth Session] [Provincial Competition] [Group B]
英语翻译软件-批量自动免费翻译软件支持三方接口翻译
银河麒麟高级服务器v10 sp1 手动加载Raid卡驱动
SSH远程管理
自动翻译软件-批量批量自动翻译软件推荐
Oracle入门 04 - Vmware虚拟机安装配置
【云原生】3.3 Kubernetes 中间件部署实战