当前位置: 首页 > news >正文

铜官山区建设局网站成都创软科技的口碑

铜官山区建设局网站,成都创软科技的口碑,计算机网站建设及管理,优质作文网站💐专栏导读 本篇文章收录于多线程,也欢迎翻阅博主的其他文章,可能也会让你有不一样的收获😄 🍂JavaSE 🌷多线程 🌼数据结构 文章目录 💐专栏导读💐wait()💐no…

💐专栏导读

本篇文章收录于多线程,也欢迎翻阅博主的其他文章,可能也会让你有不一样的收获😄
🍂JavaSE 🌷多线程 🌼数据结构

文章目录

  • 💐专栏导读
  • 💐wait()
  • 💐notify()
  • 💐notifyAll()
  • 💡wait和sleep()的区别

首先,我们知道,线程的执行顺序是随机的(操作系统随机调度的,抢占式执行),但是有时候,我们并不喜欢这种随机的执行,更喜欢的是它们能够顺序的执行,所以,Java就引入了一种机制,wait 和 notify ,它们的 作用就是保证线程执行的顺序;

而前面的文章👉中也讲过一个方法 join(),也是能影响线程的执行顺序,但是呢,这个join只能控制线程结束的顺序,而我们想要的是,线程不结束,也能按照我们自己规定的顺序去依次执行;

💐wait()

使用wait时要注意一定要搭配synchronized使用,否则的话就会抛出异常

在这里插入图片描述

调用wait时,wait会做三件事:

1、使当前代码的线程处于阻塞等待

2、释放当前锁

3、在其他线程中使用锁对象调用notify时或者使用带参数的wait(带有时间参数,超过时间就会被唤醒)被被唤醒后,然后重新尝试获取锁

在这里插入图片描述

可以看到,当执行到wait这行代码时,就一直处于了阻塞等待,因为需要在其他线程中使用notify来唤醒,而目前代码中没有其他线程,所以就一直等待;这里也需要解释一下,关于调用wait() 方法,因为,wait方法是Object类中的方法,所以,所有的对象都可以调用;

💐notify()

notify 是唤醒其他使用wait进行等待的线程;

1.调用notify的代码块要与调用wait的代码块都要在锁中使用,并且是一个锁对象

2.使用notify进行唤醒某个线程时,调用 notify() 的对象要和调用 wait() 的对象是一个 ,如果有多个线程在等待,那么唤醒后,操作系统的调度器会随机调度,不会区分先后顺序;

 public static void main(String[] args) throws InterruptedException {Object locker = new Object();Thread thread1 = new Thread(() -> {synchronized (locker) {System.out.println("thread1执行,调用wait,进行阻塞,同时释放锁");try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("thread1执行完");}});Thread thread2 = new Thread(() -> {//先进行一个睡眠,可以明显的观察效果try {Thread.sleep(100);//让thread1先执行,进入阻塞System.out.println("thread2执行,进入睡眠四秒");Thread.sleep(4000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (locker) {System.out.println("四秒后");System.out.println("进行唤醒");locker.notify();}});thread1.start();thread2.start();}

在这里插入图片描述

wait() 、notify() 也可以避免“线程饿死”

举个例子:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

💐notifyAll()

如果多个线程都调用wait的话,多个线程都会进入阻塞,那么用notify的话,就只能唤醒一个,但是用notifyAll的话,就可以一次性全部唤醒,这里要注意一点:,多个线程被同时唤醒时,就会同时获取锁,这时候就会产生锁冲突,然后只有一个线程能够成功的得到锁

💡wait和sleep()的区别

  • 类不同:sleep() 是Thread线程类的静态方法, wait() 是 Object类的方法
  • 调用后是否释放锁: sleep() 调用后不会有释放锁的操作; wait() 调用后会释放锁
  • 用途不同: wait 通常用于线程间交互/通信, sleep通常用于暂停执行
  • 用法不同:wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify() 方法, 或者 notifyAll() 方法 或者是使用wait(long timeout),指定一个阻塞时间,超时后线程自动苏醒。sleep() 方法执行完后,线程会自动苏醒。
http://www.yayakq.cn/news/693389/

相关文章:

  • 有没有免费网站制作电脑做网站电脑编程
  • 桂林网站推广网站建设提案怎么写
  • 什么网站下载素材做图的自己做网站怎么跳过备案
  • 中国网站用Cn域名金融投资理财网站建设
  • 河南建筑公司实力排名网络规划与优化技术学什么
  • 深圳网站建设服务公内蒙古网站建设熊掌号
  • 公司部门网站设计模板熊掌号如何做网站
  • 学校加强网站建设gps建站步骤视频
  • 网站跳出率 报告网站建设满意度调查问卷
  • 旺苍网站建设jsp网站开发难点
  • wordpress教程下载网站主题怎么样给一些小网站做链接
  • 专门做音箱的网站公司网站备案需要多久
  • 炫酷的网站开发深圳app定制开发报价单
  • 高端手机网站 制作公司上海有名的科技公司
  • 高级网站建设有没有类似一起做网店的网站
  • 网站平台搭建和维护需要什么wordpress培训班
  • 河南网站建设首选公司苏州做网站优化的
  • 学做凉菜冷菜的网站wordpress获取用户名
  • 网站建设与管理学习收获开发者选项怎么设置最流畅
  • 如何查看网站外链招聘网站怎么做吸引人
  • 城市建设厅官方网站怎样自己制作手机app软件
  • 杭州群游科技网站做的魔域南昌哪个网站建设比较好
  • 做网站的企业是什么行业电子业网站建设
  • 搭建平台的近义词东营网站优化
  • 网站运营技术性高吗开发公司移留问题解决物业如何打报告
  • wordpress 360 vrseo实战技巧100例
  • wordpress无法搜索重庆seo整站优化设置
  • 免费个人网站建设报价wd设计视图可以做网站吗
  • 网站建设xunmei合肥公司建设网站首页
  • 关于做公司网站360免费wifi总是断断续续的掉线