当前位置: 首页 > news >正文 WordPress显示网站加载时间好看的模板网站建设 news 2025/10/21 0:29:01 WordPress显示网站加载时间,好看的模板网站建设,学做家常菜的网站,江门论坛网站建设目录 前言 一、wait() 方法 1.方法介绍 2.代码示例 3.wait 和 sleep 的区别 二、notify() 方法 1.方法介绍 2.代码示例 三、notifyAll() 方法 1.方法介绍 2.代码示例 结尾 前言 由于线程之间是抢占式执行的#xff0c;因此线程之间的执行顺序是难以预知的#xf…目录 ·前言 一、wait() 方法 1.方法介绍 2.代码示例 3.wait 和 sleep 的区别 二、notify() 方法 1.方法介绍 2.代码示例 三、notifyAll() 方法 1.方法介绍 2.代码示例 ·结尾 ·前言 由于线程之间是抢占式执行的因此线程之间的执行顺序是难以预知的但是在我们进行多线程编程中很多时候我们希望能合理的协调多个线程之间的执行先后顺序本篇文章就是来进行介绍协调多个线程之间的执行先后顺序的方法那就是使用wait() 方法、notify() 方法和notifyAll() 方法。 一、wait() 方法 1.方法介绍 wait 方法和 join 方法用法和作用相似都可以协调多个线程之间的执行先后顺序但是使用 join 方法是要等待另一个线程执行完才能继续执行使用 wait 方法则是等待另一个线程通过 notify 方法来通知就可以继续执行wait 方法做的事情有以下几点 使当前执行代码的线程进行等待把线程放入等待队列中释放当前的锁满足一定条件时被唤醒再重新尝试获取这个锁。 wait 方法结束等待的条件有以下几条 其他线程调用该对象的 notify 方法wait 等待时间超时wait 方法有一个带有 timeout 参数的版本可以指定等待的时间 避免出现死等的情况其他线程调用该线程的 interrupted 方法导致 wait 方法抛出异常。 2.代码示例 wait 方法使用时一定是要搭配 synchronized 关键字来使用如果脱离 synchronized 使用 wait 方法就会直接抛出异常如下面代码及运行结果所示 public class WaitDeom {public static void main(String[] args) throws InterruptedException {Object object new Object();System.out.println( wait 之前....);object.wait();System.out.println( wait 之后....);} } 上述代码中是直接调用了 wait 方法此时出现的异常名称是“非法的监视器异常”synchronized 也叫做“监视器锁”锁对象就像“监控”一样一调用 wait 方法就需要释放锁但是释放锁的前提是得先拿到锁所以 wait 方法必须方法 synchronized 中使用。 介绍完 wait 方法为什么一定要在 synchronized 中使用后我来对上述有问题的代码进行修改修改后的代码及运行结果如下所示 public class WaitDeom {public static void main(String[] args) throws InterruptedException {Object object new Object();synchronized (object) {System.out.println( wait 之前....);object.wait();System.out.println( wait 之后....);}} } 我们可以发现上面的代码在 wait 方法这里阻塞了此时我们使用 jconsole 工具来观察线程状态如下图所示 调用完 wait 方法之后程序就会一直等待下去这里调用的 wait 是没有带 timeout 参数的版本所以会进行死等但是我们不希望这个程序一直这么等待下去此时就需要使用另一个方法来唤醒线程那就是 notify() 方法。 3.wait 和 sleep 的区别 wait 方法和 sleep 方法的效果有一些相似之处在使用方法上也有一些相似之处先介绍一下这两个方法类似的地方 在 wait 方法中提供了一个带有超时时间的版本sleep 方法也可以指定时间他们都是时间到就可以继续执行解除阻塞了并且wait 和 sleep 都可以被提前唤醒虽然时间没有到但是可以被提前唤醒wait 通过 notify 来唤醒sleep 通过 interrupt 唤醒。 在介绍这两个方法的区别之前还是要强调一下理论上这两个方法并没有可比性这是因为 wait 方法是用于线程之间的通信sleep 方法是让线程阻塞一段时间唯一相同的就是这两个方法都可以让线程放弃执行一段时间所以上面类似的地方也仅仅是类似。 使用 wait 时一定是不知道要等多长时间的前提下使用所以他带有超时时间的版本就是为了“兜底”大多数情况下 wait 方法都是在超时时间之内被唤醒了。 使用 sleep 方法时一定是知道要等待多少时间的前提下使用的虽然可以被提前唤醒但是这并非一个正常的操作因为在使用 sleep 方法时我们就是希望这个线程在指定时间到达后被准时唤醒而非被异常唤醒。 介绍这两个方法的区别最明显的还是以下两点 wait 方法需要搭配 synchronized 来使用而使用 sleep 方法不需要wait 方法是 Object 类中的方法而 sleep 方法是 Thread 的静态方法。 二、notify() 方法 1.方法介绍 notify() 方法的作用是唤醒等待的线程它有以下几点注意事项 notify() 方法需要在 synchronized 的代码块或用 synchronized 修饰的方法中进行使用notify() 方法是用来通知那些可能等待该锁对象的其他线程对其他线程发出通知 notify 并使它们重新获取锁对象调用 notify 方法时如果有多个线程等待就会有线程调度器随机调度出一个 wait 状态的线程并不是按照“先来后到”的顺序进行调度在调用 notify 方法后当前的线程不会立刻释放当前的锁对象而是需要等当前调用 notify 方法的线程将当前 synchronized 代码块中代码执行完之后才会释放锁对象。 再强调一下使用 notify 方法时一定要注意 wait 方法和 notify 方法彼此是通过锁对象来联系起来的比如当前有两个锁对象object1 与 object2 然后执行了 object1.wait() object2.notify() 此时执行的 notify 方法就无法唤醒只有这两个对象一样才能唤醒。 2.代码示例 通过上面对 notify 方法的介绍在这里还是用具体的代码示例来演示一下吧代码及运行结果如下所示 // 测试 notify() 方法功能 public class NotifyDemo {public static void main(String[] args) {// 创建一个锁对象Object object new Object();Thread t1 new Thread(()-{synchronized (object) {System.out.println( wait 之前);try {object.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println( wait 之后);}});Thread t2 new Thread(()-{// 让 t2 线程先休眠 2s 是为了让 t1 线程先执行到 wait() 方法try {Thread.sleep(2000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (object){System.out.println(使用 notify 唤醒 wait);object.notify();// 这里休眠两秒是为了观察调用完 notify() 方法后会不会立即释放锁对象System.out.println(休眠 2 秒观察);try {Thread.sleep(2000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});// 启动两个线程t1.start();t2.start();} } 上述代码就可以很好的演示了 notify() 方法的作用。 三、notifyAll() 方法 1.方法介绍 在上面介绍了 notify() 方法只是唤醒调用这个对象上诸多等待线程中的某一个线程使用 notifyAll() 方法则是可以唤醒这个对象上所有等待的线程假设我们创建的很多线程这些线程都使用了同一个对象调用了 wait 方法针对这个对象调用 notifyAll 方法就会将这些线程全部唤醒。但是需要注意这些线程在 wait 状态被唤醒后是需要重新获取锁的就会产生锁竞争此时哪个线程先拿到锁哪个线程后拿到锁就不确定了。 2.代码示例 介绍完 notifyAll() 方法之后还是以一个代码示例来演示一下 notifyAll() 的具体效果吧代码及运行结果如下所示 // 测试 notifyAll() 方法 public class NotifyAllDemo {public static void main(String[] args) {Object locker new Object();Thread t1 new Thread(()-{synchronized (locker) {System.out.println(执行线程 t1 的 wait 方法前);try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(t1 线程被唤醒);}});Thread t2 new Thread(()-{synchronized (locker) {System.out.println(执行线程 t2 的 wait 方法前);try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(t2 线程被唤醒);}});Thread t3 new Thread(()-{synchronized (locker) {System.out.println(执行线程 t3 的 wait 方法前);try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(t3 线程被唤醒);}});Thread t4 new Thread(()-{// 休眠 t4 线程 3s 让前三个线程先执行完 wait 方法try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}synchronized (locker) {System.out.println(唤醒全部线程.....);locker.notifyAll();}});// 启动所有线程,观察结果t1.start();t2.start();t3.start();t4.start();} } 通过上面代码运行结果可以发现两次运行结果并不相同这是因为将所有调用 wait 方法进行等待的线程唤醒之后它们会重新进行锁竞争此时无法保证哪个线程先拿到锁然后先执行所以相比之下我个人通知线程醒来还是更倾向用 notify() 方法因为使用 notifyAll() 方法将所有等待线程唤醒后不好控制。 ·结尾 文章到此也就要结束了本篇文章介绍了线程的等待通知等待使用 wait() 方法通知使用的是 notify() 方法和 notifyAll() 方法这样配合的一组方法可以让我们更合理的协调多个线程之间的执行顺序这也是我们使用 Java 进行多线程编程中的基础知识如果本篇文章对您有帮助希望能得到您的三连支持同样如果对本篇文章的知识有所疑惑也可以在评论区或者私信留言哦您的支持是我最大的动力我们下篇文章再见吧~~~ 文章转载自: http://www.morning.cpnsh.cn.gov.cn.cpnsh.cn http://www.morning.ghcfx.cn.gov.cn.ghcfx.cn http://www.morning.qkskm.cn.gov.cn.qkskm.cn http://www.morning.sfsjh.cn.gov.cn.sfsjh.cn http://www.morning.yrngx.cn.gov.cn.yrngx.cn http://www.morning.cfmrb.cn.gov.cn.cfmrb.cn http://www.morning.fgxws.cn.gov.cn.fgxws.cn http://www.morning.hhnhb.cn.gov.cn.hhnhb.cn http://www.morning.smdiaosu.com.gov.cn.smdiaosu.com http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.pkggl.cn.gov.cn.pkggl.cn http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn http://www.morning.ysqb.cn.gov.cn.ysqb.cn http://www.morning.rddlz.cn.gov.cn.rddlz.cn http://www.morning.wqjpl.cn.gov.cn.wqjpl.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn http://www.morning.kryr.cn.gov.cn.kryr.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.slpcl.cn.gov.cn.slpcl.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.mrfr.cn.gov.cn.mrfr.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.dbtdy.cn.gov.cn.dbtdy.cn http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.pmmrb.cn.gov.cn.pmmrb.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.bloao.com.gov.cn.bloao.com http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn http://www.morning.plqsz.cn.gov.cn.plqsz.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.zpyh.cn.gov.cn.zpyh.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.hclqy.cn.gov.cn.hclqy.cn http://www.morning.kjdxh.cn.gov.cn.kjdxh.cn http://www.morning.fswml.cn.gov.cn.fswml.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.yjtnc.cn.gov.cn.yjtnc.cn http://www.morning.wmdlp.cn.gov.cn.wmdlp.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.klyzg.cn.gov.cn.klyzg.cn http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn http://www.morning.bfgpn.cn.gov.cn.bfgpn.cn http://www.morning.krgjc.cn.gov.cn.krgjc.cn http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn http://www.morning.ggrzk.cn.gov.cn.ggrzk.cn http://www.morning.pqnps.cn.gov.cn.pqnps.cn http://www.morning.tnjz.cn.gov.cn.tnjz.cn http://www.morning.jhswp.cn.gov.cn.jhswp.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.ktxd.cn.gov.cn.ktxd.cn http://www.morning.lzwfg.cn.gov.cn.lzwfg.cn http://www.morning.wwklf.cn.gov.cn.wwklf.cn http://www.morning.fywqr.cn.gov.cn.fywqr.cn http://www.morning.gkgb.cn.gov.cn.gkgb.cn http://www.morning.ltfnl.cn.gov.cn.ltfnl.cn http://www.morning.drswd.cn.gov.cn.drswd.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.hotlads.com.gov.cn.hotlads.com http://www.morning.hpmzs.cn.gov.cn.hpmzs.cn http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.fhwfk.cn.gov.cn.fhwfk.cn http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.wrbf.cn.gov.cn.wrbf.cn http://www.morning.krtky.cn.gov.cn.krtky.cn http://www.morning.nzkc.cn.gov.cn.nzkc.cn http://www.morning.yzmzp.cn.gov.cn.yzmzp.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.tkgjl.cn.gov.cn.tkgjl.cn 查看全文 http://www.tj-hxxt.cn/news/235416.html 相关文章: 网站引导页动态效果怎么做的wordpress上长缺少临时文件夹 网上免费个人网站整套vi设计都包含哪些 网站建设背景和目标包子店vi设计 表单大师 做网站注册网站登录 许昌公司网站开发2024近期时事热点素材 怀宁做网站wordpress聊天系统 视频 播放网站怎么做的重庆网站建设 菠拿拿 网站开发 博客学做app 单位建网站手机设置管理网站 灯塔建设网站wordpress主题加载语言包 怎么做像小刀网一样的网站工业设计网站哪个好用 局域网视频网站建设室内设计师联盟账号 淘宝客网站建设平台网站开发的在淘宝上是什么类目 网站建设需要学那些中国50大电商排名 福州帮人建网站公司广东工厂搜索seo 类似美团的网站建设深圳实惠的专业建站公司 拼多多网站的类型重庆定制网站建设公司 怎么做免费网站推佛山网站开发公司 如何从网站获取图片做全景图福州企业网站维护价格低 东莞金融网站建设家装公司名称 浦东新区建设工程安全质量监督站网站江门网站建设技术托管 个人网站设计与制作源代码安卓apk开发 wordpress 标题截断网站标题应该怎么做SEO优化 如何成为一个优秀的网站设计师织梦网站后台模板 做网站价格需要多少钱wordpress tag多条件选择 服务器有了网站怎么做的wordpress 插件查看 网站建设客户需求分析调研表做视频网站需要什么职位工作 网站负责人 法人做调查网站的问卷哪个给的钱高 兴安盟网站建设网站备案复查 手机号码打不通 旅游网站建设要如何做网站项目怎么做