对网站设计的建议/百度一下百度一下你知道

对网站设计的建议,百度一下百度一下你知道,学网站开发难吗,有哪些网站可以推广今天小编继续来分享下多线程中的一些内容。 在多线程环境下,由于线程调度的不确定性,所以我们有时候无法很好的去保证其线程的执行顺序。 但是呢,我们又要实现这个顺序执行,所以我们可以使用到这两个方法,wait 和 no…

今天小编继续来分享下多线程中的一些内容。

在多线程环境下,由于线程调度的不确定性,所以我们有时候无法很好的去保证其线程的执行顺序。

但是呢,我们又要实现这个顺序执行,所以我们可以使用到这两个方法,wait 和 notify

当然,这两个方法是要在锁内部进行调用的。

那wait 和 notify 方法是什么呢?

wait 


是使当前执行代码的线程进行等待。它还具有另一个带参数的版本:wait(long timeout)

这里的等待,会放进一个等待队列中。

然后,接着会释放当前代码锁的资源

当满足一定的条件过后,它会被唤醒,重新去获取锁。

那这里的条件呢,有这些:

1.其他线程进行notify()

2.当带参数的版本中,时间超出了long timeout,也会被唤醒

3.其他线程中,调用本线程的interrupted方法,导致了wait抛出InterruptedException异常

notify

这个方法是唤醒等待的线程。

这里要值得注意的是

1.notify需要在同步方法或者同步块中使用,因为该方法是去通知可能等待该对象的对象锁的其他线程,并使它们重新获取锁资源。

同步方法:是指synchronized关键字修饰的方法。

同步块:

synchronized(锁){

}

2.如若是多个线程进行等待,那么此时唤醒线程,也是随机的,没有所谓的“先来后到之说”

3.notify方法执行完后,不会立即释放当前锁资源,而是还会等到同步方法,或者同步块执行完。

那来看看这个例子,是如何搭配一起使用的吧

 public static void main(String[] args) throws InterruptedException {Object obj=new Object();Thread t=new Thread(()->{synchronized (obj){System.out.println("notify之前");obj.notify();System.out.println("notify之后");}});System.out.println("wait之前");synchronized(obj){t.start();obj.wait();}System.out.println("wait之后");}

代码结果如下:

wait之前
notify之前
notify之后
wait之后

ok,再次引入一个例子,加深对其的了解吧

比如,我现在要按顺序打印A、B、C

那么我们该如何做呢?

我们可以创建三个线程,两个锁

A线程,打印A,B线程中等待,C等待B线程

打印完A,那就唤醒B线程

打印完B线程,然后去唤醒C线程。

代码如下:

public class Demo21 {public static Object locker=new Object();public static Object locker2=new Object();public static void main(String[] args) throws InterruptedException {Thread A=new Thread(()->{System.out.println("A");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (locker){locker.notify();}});Thread B=new Thread(()->{synchronized (locker){try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("B");}synchronized (locker2){locker2.notify();}});Thread C=new Thread(()->{synchronized (locker2){try {locker2.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("C");}});A.start();B.start();C.start();}
}

那么,除了这个notify,还有一个notifyAll

那么这个notifyAll又是什么呢?

notifyAll

notifyAll方法可以一次性唤醒所有的线程等待。

这里值得注意的是,notifyAll多次调用是没有问题,不会出现报错

还有,这个是需要同一把锁,才能全部唤醒

唤醒后,所有线程需要重新获取锁,获取锁的过程是系统决定,依然是具有不确定性。

ok,那么小编就先分享到这里吧。

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

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

相关文章

达梦:AWR 生成

目录标题 AWR 性能诊断与报告生成1. 检查 AWR 系统状态2. 查看数据库中的所有表空间3. 查看现有的 AWR 快照4. 设置 AWR 快照的时间间隔5. 创建 AWR 快照6. 查看最新的 AWR 快照7. 生成 AWR HTML 报告8. 将 AWR 报告保存到指定文件链接总结 自动工作集负载信息库 AWR 报告解析指…

【Map vs Set】:Java数据存储的“双子星”对决

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 🍰一、搜索 🍮1.概念 🍮2.模型 🍰二、Map 🍨1.什么是Map? 🍨2.Map的实例化 &…

【C语言 】C语言 桌游开发数字竞拍(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言 】C语言 桌游开发数字竞拍(源码…

Reinforcement Learning Heats Up 强化学习持续升温

Reinforcement Learning Heats Up 强化学习持续升温 核心观点:强化学习正成为构建具有高级推理能力大语言模型(LLMs)的重要途径。 最新进展 模型示例:近期出现了如DeepSeek - R1及其变体(DeepSeek - R1 - Zero&#xf…

Whisper+T5-translate实现python实时语音翻译

1.首先下载模型,加载模型 import torch import numpy as np import webrtcvad import pyaudio import queue import threading from datetime import datetime from faster_whisper import WhisperModel from transformers import AutoTokenizer, AutoModelForSeq2…

湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构

导读:浙江霖梓早期使用 CDH 产品套件搭建了大数据系统,面临业务逻辑冗余、查询效率低下等问题,基于 Apache Doris 进行整体架构与表结构的重构,并基于湖仓一体和查询加速展开深度探索与实践,打造了 Doris Paimon 的实…

Jmeter压测怎么控制TPS

压测固定TPS的接口 有些任务需要我们控制接口的TPS,例如每秒请求一次。 TPS定时器 然后1个并发持续运行 压测结果 需要注意TPS在1.0/s左右,有时可能是1.2、1.3,定时器会自动调整压力,让TPS保持在1.0左右。

信呼OA办公系统sql注入漏洞分析

漏洞描述 信呼OA办公系统uploadAction存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。 环境搭建 源码下载地址:https://github.com/rainrocka/xinhu 下载后解压到本地网站根目录下,配置好数据库,然后安装即可 默认密…

一文深入了解DeepSeek-R1:模型架构

本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…

算法兵法全略(译文)

目录 始计篇 谋攻篇 军形篇 兵势篇 虚实篇 军争篇 九变篇 行军篇 地形篇 九地篇 火攻篇 用间篇 始计篇 算法,在当今时代,犹如国家关键的战略武器,也是处理各类事务的核心枢纽。算法的世界神秘且变化万千,不够贤能聪慧…

开关电源实战(一)宽范围DC降压模块MP4560

系列文章目录 文章目录 系列文章目录MP4560MP4560 3.8V 至 55V 的宽输入范围可满足各种降压应用 MOSFET只有250mΩ 输出可调0.8V-52V SW:需要低VF肖特基二极管接地,而且要靠近引脚,高压侧开关的输出。 EN:输入使能,拉低到阈值以下关闭芯片,拉高或浮空启动 COMP:Compens…

微软AutoGen高级功能——Magentic-One

介绍 大家好,博主又来给大家分享知识了,这次给大家分享的内容是微软AutoGen框架的高级功能Magentic-One。那么它是用来做什么的或它又是什么功能呢,我们直接进入正题。 Magentic-One Magnetic-One是一个通用型多智能体系统,用于…

DeepSeek是如何通过“蒸馏”技术打造自己的AI模型

1 引言: 最近,外媒对中国公司——DeepSeek进行了猛烈抨击,指控其采用了所谓的“蒸馏”(Distillation)技术,涉嫌抄袭甚至作弊。那么,什么是“蒸馏”技术? 在人工智能领域,…

【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网:http://www.icetae.com/【更多详情】 会议时间:2025年4月25-27日 会议地点&#xff1a…

伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries

本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理,全英文内容,文末附词汇解释。 目录 01 Strings 字符串 Ⅰ Strings are An Abstraction. Ⅱ Strings Literals have Three Forms Ⅲ String are Sequences 02 Dictionaries 字典 …

基于 GEE 计算研究区年均地表温度数据

目录 1 代码解析 2 完整代码 3 运行结果 1 代码解析 (1)定义研究区: // 研究区的范围需要自己提前上传 var dataset table;// 将研究区显示在中心,后面的数字为缩放等级,范围从1 - 24 Map.centerObject(dataset,…

日常知识点之遗留问题梳理(定时器/时间轮定时器)

1:简单基础 定时器的核心知识点,对我来说就是获取当前时间和设置回调函数。 简单练习: ​ c语言通过gettimeofday 获取当前时间并进行处理 ​ 回调函数的定义(函数参数有必要适当存储) typedef void(Timerfunc)(vo…

Python + WhisperX:解锁语音识别的高效新姿势

大家好,我是烤鸭: 最近在尝试做视频的质量分析,打算利用asr针对声音判断是否有人声,以及识别出来的文本进行进一步操作。asr看了几个开源的,最终选择了openai的whisper,后来发现性能不行,又换了…

mapbox 从入门到精通 - 目录

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀总目录1.1 ☘️ mapbox基础1.2 ☘️…

sqlilabs--小实验

一、先盲注判断 ?id1 and sleep(2)-- 如果发现页面存在注点,使用时间盲注脚本进行注入 import requestsdef inject_database(url):name for i in range(1, 20): # 假设数据库名称长度不超过20low 48 # 0high 122 # zmiddle (low high) // 2while low &l…