java--基础--17.8--线程--wait方法与sleep方法区别

2023-10-30

java–基础–17.8–线程–wait方法与sleep方法区别


1、介绍

wait:线程间的通讯的问题,需要等待别的线程唤醒。 
sleep:自己控制线程的运行状态 ,隔了一段时间自动醒过来。


wait:方法释放了锁
sleep:方法没有释放锁


wait:只能在同步控制方法或者同步控制块里面使用
sleep:在任何地方使用

2、代码验证

2.1、sleep验证

public class Demo2 {
	

	public static void main(String[] args) {
		Demo2 d = new Demo2();
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				synchronized (d) {
					System.out.println("修改状态的sleep线程执行...");
					try {
						Thread.sleep(5000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("状态值修改成功。。。");

				}
			}
		}).start();
	}

}

修改状态的sleep线程执行…
状态值修改成功。。。

2.2、wai验证

public class Demo3 {

private volatile int signal;
	
	public synchronized void set () {
		signal = 1;
		notifyAll(); // notify方法会随机叫醒一个处于wait状态的线程
		 // notifyAll叫醒所有的处于wait线程,争夺到时间片的线程只有一个
		System.out.println("叫醒所有的处于wait线程...之后休眠3秒");
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public synchronized int get () {
		long begin = System.currentTimeMillis();
		System.out.println(Thread.currentThread().getName() + " get方法开始..."+begin);
		if(signal != 1) {
			try {
				wait();
				System.out.println("叫醒之后");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println(Thread.currentThread().getName() + " get方法结束..."+(System.currentTimeMillis()-begin));
		return signal;
	}
	
	public static void main(String[] args) throws InterruptedException {
		
		Demo3 d = new Demo3();

		Runnable t1 = new Runnable() {
			@Override
			public void run() {
				d.set();
			}
		};

		Runnable t2 = new Runnable() {
			@Override
			public void run() {
				d.get();
			}
		};


		
		new Thread(t2).start();
		new Thread(t2).start();
		new Thread(t2).start();
		new Thread(t2).start();


		Thread.sleep(1000);
		
		new Thread(t1).start();
		
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java--基础--17.8--线程--wait方法与sleep方法区别 的相关文章

随机推荐

  • 95-34-035-Context-HeadContext和TailContext

    文章目录 1 概述 2 继承体系 3 HeadContext 3 1 类签名 4 TailContext 1 概述 HeadContext和TailContext使用继承的方式关联Handler 作为ChannelPipeline双向链表的
  • Sort()函数用法:比较函数写法

    sort 函数 sort函数可以三个参数也可以两个参数 必须包含头文件 include lt algorithm gt using namespace std 它使用的排序方法是类似于快排的方法 时间复杂度为o nlog n Sort函数有
  • 微信开发 "errcode":-1 应该怎么办

    相信不少朋友在微信开发的时候遇到了 string errcode 1 errmsg system error length 38 这个时候并不是你的代码有问题 你只需要将你的PHP文件的编码改成utf 8即可 不知道如何操作的朋友 可以按照
  • Java 前后端分离业务封装 对后端返回值进行封装 PageVO封装

    遇到前后端业务需要不一致时对Controller返回结果进行封装 后端返回结果 前后端分离后 web 端要求结果 counts 2694 pagesize 14 pages 8 page 66 items id 9009384 title
  • qtcpsocket类read函数接收大数据_一篇易懂的CAN 通讯功能实现指南2--READ

    通过一篇易懂的CAN通讯协议指南1 我们知道 CAN总线的2种架构 高速CAN和低速CAN CAN协议帧类型 数据帧 遥控帧 错误帧 过载帧 线与机制 仲裁机制 位定时与同步 以上基础的应用多数体现在硬件处理部分 所以只有少数体现在软件部分
  • Vue-搜索框实现

    热爱生活 热爱技术 热于分享 一 方法分析 1 字符串匹配 BF算法 KMP算法 库函数indexOf均可实现 2 v for循环实时更新元素 3 click 实现点击后页面的跳转同时设置不同id来根据内容的不同来跳转到不同页面 二 代码分
  • 在ESP32的Lvgl8上使用LvglFontTool显示汉字

    这里写目录标题 一 使用LvglFontTool4 0转换字体 二 修改生成的C文件 二 使用字体 用法1 在canvas上绘制 用法2 在label上显示 一 使用LvglFontTool4 0转换字体 这个工具是阿里兄大佬提供的 他的论
  • 对Java中&&和&

    初学java的话可能会对一些预算符不是很理解 什么优先级呀 运算顺序啊 今天就先谈谈 他们的区别 首先 逻辑与 按位与 逻辑或 按位或 比如 if a 2 b 3 说明两者都要满足 如果有一为false 就不会运算输出 if a 2 b 3
  • ffmpeg mkv 转 MP4

    ffmpeg i 源文件名 c v copy c a aac 目标文件名 ffmpeg i 1 mkv c v copy c a aac 1 mp4
  • 【C++】到底什么是链接,它起到了什么作用

    当程序包含了数百万行的代码 以至于人们无法维护这个程序了 于是人们开始寻找新的方法 迫切地希望将程序源代码分散到多个文件中 一个文件一个模块 以便更好地阅读和维护 这个时候 链接器就粉墨登场了 变量名 函数名等仅仅是地址的一种助记符 目的是
  • python里面的pip是什么意思_python中pip是什么

    python中pip是什么 pip是一个以Python计算机程序语言写成的软件包管理系统 他可以安装和管理软件包 另外不少的软件包也可以在 Python软件包索引 英语 Python Package Index 简称PyPI 中找到 命令行
  • 傅里叶描述子欧氏距离_基于旋转轮廓的点云局部浮点型和二值化特征描述(RCS)...

    作者 小毛 Date 2020 05 19 来源 基于旋转轮廓的点云局部浮点型和二值化特征描述 RCS 本次介绍一个发表于Computer Vision and Image Understanding的经典三维点云描述子RCS 论文地址 J
  • 第10节-函数三(高阶函数/匿名函数/闭包/装饰器)

    第10节 函数三 高阶函数 匿名函数 闭包 装饰器 一 高阶函数 二 匿名函数 1 过滤器 2 匿名函数 lambda函数 三 闭包 四 装饰器 一 高阶函数 满足下列特点之一的函数称之为高阶函数 特点1 接收一个或者多个函数作为参数 特点
  • node-formidable源码:原生javascript解析前端传输的FormData

    本系列文章是本人学习相关知识时所积累的笔记 以记录自己的学习历程 也为了方便回顾知识 故文章内容较为随意简练 抱着学习目的来的同学务必转移他处 以免我误人子弟 参考资料 酷勤网 在Koa和Express中 已经通过node formidab
  • css 实现三角形阴影

    平时工作中 设计给出的类似于对话框的样式 基本上都会有阴影 这个时候一般都是有两种方式实现 一是用背景图 二是用代码实现 如图样式 这里只说使用代码来实现
  • kmeans算法实现及获取anchors

    kmeans算法网上资料很多 其原理简单来说就选取k个聚类中心 然后把剩余的点归类到与其相距最近的聚类中心 是一种无监督算法 缺点和不足有两个 第一个是k需要指定 第二个是对于聚类中心种子点的选取很敏感 本文将以yolov4算法使用kmea
  • Python 基础教程——语法

    前言 Python 语言与 Perl C 和 Java 等语言有许多相似之处 但是 也存在一些差异 这次我们将来学习 Python 的基础语法 让你快速学会 Python 编程 第一个 Python 程序 交互式编程 交互式编程不需要创建脚
  • RocketMQ第四节(部署模式、监控面板等)

    1 mq的部署模式 部署方式 RocketMQ 参考官网 单机模式 抗风险能力差 单机挂机没服务 单机硬盘损坏 丢失数据 多机 多master没有Slave副本 多个master采用RAID10磁盘 不会丢失数据 但是某一个master关闭
  • Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题

    文章目录 环境 目的 原因 问题 解决方法 环境 Unity 国际版2020 3 37f1 Pipeline BRP Packages Post Processing 3 0 3 目的 BRP 虽然是 官方放弃更新的 渲染管线 但是有些项目
  • java--基础--17.8--线程--wait方法与sleep方法区别

    java 基础 17 8 线程 wait方法与sleep方法区别 1 介绍 wait 线程间的通讯的问题 需要等待别的线程唤醒 sleep 自己控制线程的运行状态 隔了一段时间自动醒过来 wait 方法释放了锁 sleep 方法没有释放锁