wait和notify使用案例

/*** 开启四个线程 两个waitThread和 两个notifyThread * 使用notifyThread唤醒waitThread线程*/
public class NotifyExample {public static void main(String[] args) {final Object lock = new Object();Thread waitThread1 = new Thread(() -> {synchronized (lock) {System.out.println(LocalTime.now() +  " " + Thread.currentThread().getName()  +" WaitThread: Going to wait");try {lock.wait(); // wait until notified} catch (InterruptedException e) {System.out.println(e);}System.out.println(LocalTime.now() +  " " + Thread.currentThread().getName()   + " WaitThread: Woke up");}});Thread waitThread2 = new Thread(() -> {synchronized (lock) {System.out.println(LocalTime.now() + " " + Thread.currentThread().getName()   + " WaitThread: Going to wait");try {lock.wait(); // wait until notified} catch (InterruptedException e) {System.out.println(e);}System.out.println(LocalTime.now() + " " + Thread.currentThread().getName()   + " WaitThread: Woke up");}});Thread notifyThread1 = new Thread(() -> {try {Thread.sleep(4000); // sleep for 2 seconds} catch (InterruptedException e) {System.out.println(e);}synchronized (lock) {System.out.println(LocalTime.now() +  " " + Thread.currentThread().getName()   +  " NotifyThread: Notifying the waiting thread");lock.notify(); // notify the waiting thread}});Thread notifyThread2 = new Thread(() -> {try {Thread.sleep(6000); // sleep for 2 seconds} catch (InterruptedException e) {System.out.println(e);}synchronized (lock) {System.out.println(LocalTime.now() +  " " + Thread.currentThread().getName()   + " NotifyThread: Notifying the waiting thread");lock.notify(); // notify the waiting thread}});waitThread1.start();waitThread2.start();notifyThread1.start();notifyThread2.start();}
}

输出结果

11:31:15.969 Thread-0 WaitThread: Going to wait
11:31:15.969 Thread-1 WaitThread: Going to wait
11:31:19.946 Thread-2 NotifyThread: Notifying the waiting thread
11:31:19.946 Thread-0 WaitThread: Woke up
11:31:21.945 Thread-3 NotifyThread: Notifying the waiting thread
11:31:21.945 Thread-1 WaitThread: Woke upProcess finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地/笔记本/纯 cpu 部署、使用类 gpt 大模型

文章目录 1. 安装 web UI1.1. 下载代码库1.2. 创建 conda 环境1.3. 安装 pytorch1.4. 安装 pip 库 2. 下载大模型3. 使用 web UI3.1. 运行 UI 界面3.2. 加载模型3.3. 进行对话 使用 web UI 大模型文件,即可在笔记本上部署、使用类 gpt 大模型。 1. 安装 web UI 1…

DCDC同步降压控制器SCT82A30\SCT82630

SCT82A30是一款100V电压模式控制同步降压控制器,具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比,实现从48V输入到低压轨的直接降压转换,降低了系统复杂性和解决方案成本。如果需要,在低至6V的输入电压下降期间&am…

Vue 前置 后置 路由守卫 独享 路由权限控制 自定义属性

import Vue from vue import VueRouter from vue-router //导入路由器 Vue.use(VueRouter)import Login from ../components/Login import User from ../components/User //导入需要路由的组件const router new VueRouter({//暴露出去使用routes:[{path: /login,component: Lo…

互联网上门洗衣洗鞋店小程序开发;

干洗店、洗鞋店上门服务,如果搭配洗衣、洗鞋软件,门店的基本功能如收件、充值、上挂等应有尽有,而且支持多家店互联互通,通过小程序、公众号招揽线上生意。 门店版:为单店或多门店连锁的经营模式提供一整套的软件系统…

基于可变形卷积和注意力机制的带钢表面缺陷快速检测网络DCAM-Net(论文阅读笔记)

原论文链接->DCAM-Net: A Rapid Detection Network for Strip Steel Surface Defects Based on Deformable Convolution and Attention Mechanism | IEEE Journals & Magazine | IEEE Xplore DCAM-Net: A Rapid Detection Network for Strip Steel Surface Defects Base…

二次开发库Demo【C#】

1厂家会提供几个文件: 文件【xxx.h】和【xxx.lib】和【xxx.dll】 xxx.h 文件包含 【函数方法名】 ,用于程序内调用xxx.lib 用于添加依赖项xxx.dll 动态链接库 2使用方法: 首先,把库函数文件都放在工作目录下。库函…

localStorage

localStoragelocalStorage可以将第一次请求的数据直接存储到本地,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小(不同的浏览器有所不同)。 localStorage的局限 1、浏览器的大小不统一&am…

运维小技能:centos安装宝塔

文章目录 引言I 安装宝塔1.1 SSH重启宝塔面板的方法1.2 安装宝塔后需开端口,不开启将无法使用。引言 https://www.bt.cn/new/index.html 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库…

shell脚本用法参数

-e  若指令传回值不等于0,则立即退出shell #!/bin/bash set -e .... ....A${yhl:-123}和:${yhl123}在功能上是类似的,都用于设置变量的默认值 :${yhl123}返回的结果总是真

uniapp - 开关按钮

目录 1.运行代码如下&#xff1a; 2.运行效果 3.switch属性 1.运行代码如下&#xff1a; <template><view class"switchBox"><switch change"switchChange" color"#F21177" :checked"form.checked" /></view&…

Spring Security6 用户身份认证

前提 你需要先拜读 [Spring Security 6 官方文档](https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html#servlet-authentication-authenticationmanager) 你需要弄清楚身份认证&#xff08;Authentication&#xff09;和鉴权&#xff…

科大讯飞 vue.js 语音听写流式实现 全网首发

组件下载 还是最近的需求&#xff0c;页面表单输入元素过多&#xff0c;需要实现语音识别来由用户通过朗读的方式向表单中填写数据&#xff0c;尽量快的、高效的完成表单数据采集及输入。 国内科大讯飞在语音识别方面的建树还是有目共睹&#xff0c;于是还是选择了科大讯飞的平…

【AI实用技巧】GPT写sql统计语句

编写sql的统计语句是一项复杂的任务&#xff0c;特别是涉及多表的情况下。但有了GPT的帮助&#xff0c;一切变得轻松愉快。 AI7号 - 最强人工智能&#xff08;GPT&#xff09;中文版https://ai7.pro/s/9v2um 举例说明 有表结构如下&#xff1a; users(user_id, name) bills(…

改进YOLOv8:结合ConvNeXt V2骨干网络!使用MAE共同设计和扩展ConvNet

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …

函数调用分析

目录 函数相关的汇编指令 JMP指令 call指令 ret指令 VS2019正向分析main函数 总结调用函数堆栈变化规律 x64dbg分析调用函数 IDA分析调用函数 函数相关的汇编指令 JMP指令 JMP 指令表示的是需要跳转到哪个内存地址&#xff0c;相当于是间接修改了 EIP 。 call指令 ca…

Windows环境VSCode配置OpenCV-项目配置(二)

修改c_cpp_properties.json {"configurations": [{"name": "windows-gcc-x64","includePath": ["${workspaceFolder}/**","D:/mingw64/mingw64/include","D:/openCV_win/build/install/include","…

系列十二、线程池

一、线程池 1.1、为什么需要线程池 10年前单核CPU电脑&#xff0c;假的多线程&#xff0c;像马戏团小丑玩多个球&#xff0c;CPU需要来回切换。现在是多核电脑&#xff0c;多个线程各自跑在独立的CPU上&#xff0c;不用切换效率高。 1.2、优势 线程池做的主要工作是控制运行的…

GZ033 大数据应用开发赛题第07套

2023年全国职业院校技能大赛 赛题第07套 赛项名称&#xff1a; 大数据应用开发 英文名称&#xff1a; Big Data Application Development 赛项组别&#xff1a; 高等职业教育组 赛项编号&#xff1a; GZ033 …

天猫超市电商营销系统:无代码开发实现API连接集成

无代码开发实现天猫超市与电商系统的高效连接 天猫超市&#xff0c;作为天猫推出的网络零售超市&#xff0c;为广大网购消费者提供了一站式的购物服务。而通过无代码开发的方式&#xff0c;天猫超市能够实现与各种电商系统的连接和集成&#xff0c;这种方式无需进行繁琐的API开…