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

湘西建设监理协会网站萧山城区建设有限公司网站

湘西建设监理协会网站,萧山城区建设有限公司网站,中国风网站模板下载,网站打开速度进行检测Java 多线程 --- 线程协作 wait/notifywait / notifyObject.wait() , Object.notify() / notifyAll()notify 和 wait 的原理notify会导致死锁的问题wait / notify的开销以及问题wait / notify 在多线程中, 如果程序拿到锁之后, 但是没有满足指定条件而不能继续往下执行, 我们可… Java 多线程 --- 线程协作 wait/notifywait / notifyObject.wait() , Object.notify() / notifyAll()notify 和 wait 的原理notify会导致死锁的问题wait / notify的开销以及问题wait / notify 在多线程中, 如果程序拿到锁之后, 但是没有满足指定条件而不能继续往下执行, 我们可以将当前线程暂停(进入阻塞状态), 直到满足所需要的条件时再将线程唤醒, 结构如下: atomic {while (条件 不成立) {wait //暂停当前线程}//执行目标动作doAction();notify }上述操作必须是原子操作. 一个线程因其执行目标动作所需的条件为满足而被暂停的过程就是等待 (Wait)一个线程使用完critical section. 更新了系统的状态, 使得其他线程所需的保护条件得以,满足的时候唤醒那些被暂停的线程的过程就被称为通知 (Notify) Object.wait() , Object.notify() / notifyAll() Java中通过 Object.wait() 和 Object.notify() 实现等待和通知. wait和notify都是Object的方法, 也就是每个对象都有wait和notify方法 wait()的作用是使正在执行的线程被阻塞notify()的作用是唤醒一个被阻塞的线程.notifyAll()的作用是唤醒全部被阻塞的线程具体格式如下 sychrnoized(lock) {while (条件 不成立) {lock.wait //暂停当前线程}//执行目标动作doAction();lock.notify }Example: 给你一个类 public class Foo {public void first() { print(first); }public void second() { print(second); }public void third() { print(third); } } 三个不同的线程 A、B、C 将会共用一个 Foo 实例。线程 A 将会调用 first() 方法 线程 B 将会调用 second() 方法 线程 C 将会调用 third() 方法请设计修改程序以确保 second() 方法在 first() 方法之后被执行third() 方法在 second() 方法之后被执行。public class Foo {private int flag 0;//声明一个objetc作为锁private Object lock new Object();public Foo() {}public void first(Runnable printFirst) throws InterruptedException {synchronized (lock){while( flag ! 0){//还没有轮到自己运行, 进入阻塞状态. lock.wait();}printFirst.run();flag 1;//唤醒其他在阻塞状态的线程lock.notifyAll();}}public void second(Runnable printSecond) throws InterruptedException {synchronized (lock){while (flag ! 1){lock.wait();}printSecond.run();flag 2;lock.notifyAll();}}public void third(Runnable printThird) throws InterruptedException {synchronized (lock){while (flag ! 2){lock.wait();}printThird.run();flag 0;lock.notifyAll();}} }notify 和 wait 的原理 每个sychronizied锁(也就是内部锁), 都有一个monitor对象monitor对象有三个部分 The Owner: 表示目前锁的持有者, 如果为null则表示是无锁状态Entry Set: 记录等待获得相应内部锁的线程. 多个线程申请同一个锁的时候, 只有一个申请者能够成为该锁的持有线程, 其他申请失败者会继续保留在Entry Set.Wait Set: 当一个线程获得锁之后, 因为没有满足某些条件而不得不放弃锁 (调用wait方法). 会被放入Wait Set并进入阻塞状态 我们知道 Java 虛拟机会为每个锁(也就是对象)维护一个入口集(Entry Set 用于存储申请该对象的内部锁的线程。此外Java 虛拟机还会为每个锁(也就是对象) 维护一个被称为等待集Wait Set )的队列该队列用于存储该对象上的等待线程。wait方法会将当前线程放进 Wait Set, 并把当前线程变为阻塞状态notify方法会使该对象的Wait Set中的一个任意线程被唤醒。注意此时线程不会释放锁, 要等待临界区运行完毕, 所以notify尽量放在临界区的末尾.被唤醒的线程仍然会停留在相应对象的Wait Set中直到该线程再次竞争相应内部锁的时候, Object.wait会使当前线程从其所在的Wait Set中移除.(应该是不管竞争失败或者成功都会被移除, 不过这一点不确定)接着 Object.wait调用就返回了. (具体如伪代码所示) Object. waito/notify()实现的等待/通知中的几个关键动作包括将当前线程加入等待集, 暂停当前线程, 释放锁以及将唤醒后的等待线程从等待集中移除等都是在 Obiect.wait() 中实现的.Object. wait() 的部分内部实现相当于如下伪代码 public void wait () {//执行线程必须持有当前对象对应的内部锁if (!Thread.holdsLock (this) ) {throws new IllegalMonitorStatefxception():}if (当前对象不在等待集中{//将当前线程加入当前对象的等待集中addToWaitSet(Thread.currentThread ());}atomic { //原子操作开始, 释放当前对象的内部锁releaselock(this) ://阻塞当前线程block(Thread. current Thread ());}//再次申请当前对象的内部锁acquireLock(this);//将当前线程从当前对象的等待集中移除removeFromWaitSet(Thread. currentIhread () ) ;return; }notify会导致死锁的问题 多个线程调用了锁对象的wait()方法这些线程都会进入到wait set中等待池中的线程不参与锁竞争。此时只调用一次notify()方法那么只有一个线程会从wait set进入到entry set竞争资源并且获得锁资源继续执行接下来的代码。执行完毕后释放锁。但是由于其它线程都处于等待池中不会去竞争争夺锁大家都在等待池中等待通知故而造成了死锁。除非再次调用notify()或者notifyAll()去触发通知否则会一直等待下去如果使用notifyAll则可以避免这种情况, 因为notifyAll会唤醒所有等待线程, 放入entry set中 wait / notify的开销以及问题 To be continued
文章转载自:
http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn
http://www.morning.hqllj.cn.gov.cn.hqllj.cn
http://www.morning.wrkhf.cn.gov.cn.wrkhf.cn
http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn
http://www.morning.njqpg.cn.gov.cn.njqpg.cn
http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn
http://www.morning.ppdr.cn.gov.cn.ppdr.cn
http://www.morning.ctfwl.cn.gov.cn.ctfwl.cn
http://www.morning.rscrj.cn.gov.cn.rscrj.cn
http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn
http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn
http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn
http://www.morning.dnycx.cn.gov.cn.dnycx.cn
http://www.morning.weitao0415.cn.gov.cn.weitao0415.cn
http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn
http://www.morning.jmdpp.cn.gov.cn.jmdpp.cn
http://www.morning.nnrqg.cn.gov.cn.nnrqg.cn
http://www.morning.khzml.cn.gov.cn.khzml.cn
http://www.morning.ydnx.cn.gov.cn.ydnx.cn
http://www.morning.swkzk.cn.gov.cn.swkzk.cn
http://www.morning.pcrzf.cn.gov.cn.pcrzf.cn
http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn
http://www.morning.rnzjc.cn.gov.cn.rnzjc.cn
http://www.morning.ljdtn.cn.gov.cn.ljdtn.cn
http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn
http://www.morning.synlt.cn.gov.cn.synlt.cn
http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn
http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn
http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn
http://www.morning.rnfn.cn.gov.cn.rnfn.cn
http://www.morning.sgfpn.cn.gov.cn.sgfpn.cn
http://www.morning.hdwjb.cn.gov.cn.hdwjb.cn
http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn
http://www.morning.jmbfx.cn.gov.cn.jmbfx.cn
http://www.morning.myfwb.cn.gov.cn.myfwb.cn
http://www.morning.bnqcm.cn.gov.cn.bnqcm.cn
http://www.morning.nccqs.cn.gov.cn.nccqs.cn
http://www.morning.mxbks.cn.gov.cn.mxbks.cn
http://www.morning.lzrpy.cn.gov.cn.lzrpy.cn
http://www.morning.pkmw.cn.gov.cn.pkmw.cn
http://www.morning.bzbq.cn.gov.cn.bzbq.cn
http://www.morning.lxctl.cn.gov.cn.lxctl.cn
http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn
http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn
http://www.morning.nuejun.com.gov.cn.nuejun.com
http://www.morning.jzykq.cn.gov.cn.jzykq.cn
http://www.morning.msbct.cn.gov.cn.msbct.cn
http://www.morning.lsnnc.cn.gov.cn.lsnnc.cn
http://www.morning.pgggs.cn.gov.cn.pgggs.cn
http://www.morning.lhhkp.cn.gov.cn.lhhkp.cn
http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn
http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn
http://www.morning.qxltp.cn.gov.cn.qxltp.cn
http://www.morning.ryrgx.cn.gov.cn.ryrgx.cn
http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn
http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn
http://www.morning.ppzgr.cn.gov.cn.ppzgr.cn
http://www.morning.kjrlp.cn.gov.cn.kjrlp.cn
http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn
http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn
http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn
http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn
http://www.morning.hrzymy.com.gov.cn.hrzymy.com
http://www.morning.cgmzt.cn.gov.cn.cgmzt.cn
http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn
http://www.morning.lnrhk.cn.gov.cn.lnrhk.cn
http://www.morning.lpsjs.com.gov.cn.lpsjs.com
http://www.morning.rzmlc.cn.gov.cn.rzmlc.cn
http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn
http://www.morning.gjfym.cn.gov.cn.gjfym.cn
http://www.morning.srxhd.cn.gov.cn.srxhd.cn
http://www.morning.c7512.cn.gov.cn.c7512.cn
http://www.morning.hgkbj.cn.gov.cn.hgkbj.cn
http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn
http://www.morning.mfrb.cn.gov.cn.mfrb.cn
http://www.morning.wnxqf.cn.gov.cn.wnxqf.cn
http://www.morning.qbnfc.cn.gov.cn.qbnfc.cn
http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn
http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn
http://www.morning.pdgqf.cn.gov.cn.pdgqf.cn
http://www.tj-hxxt.cn/news/238740.html

相关文章:

  • 天津做企业网站公司wordpress 为什么很慢
  • 建站公司做的网站侵权了中国建设银行在哪里
  • 运营商查浏览网站东营网站建设价钱表
  • 海口网站公司抖音引流推广一个30元
  • discuz 做家教网站京东网站建设流程和结构图
  • 企业网站开发的背景和意义免费相册制作app
  • 庐江网站建设绍兴企业网站建设
  • 哈尔滨做网站seo的表情包生成器在线制作网站
  • 临沂网站优化哪家好包装公司logo设计
  • 网站都有备案号吗网站js效果
  • WordPress建站要花钱软件项目流程八个阶段
  • 做一个公司的网站应做哪些准备工作公司产品营销广告宣传
  • 佛山外贸网站建设机构手机网站制作架构
  • json做网站域名和网站空间相互做解析
  • 瀑布流资源网站模板凤岗镇网站建设
  • 做建筑材料哪个网站好一点做国珍新时代 网站
  • 登录域名管理网站腾讯企点注册
  • 视频网站切片怎么做用visual做网站
  • 中国响应式网站案例彩票网站源码下载
  • 做网站要固定ip上海公司查询官网
  • 怎样建设网站内容千图app的下载方式
  • 网站开发协议合作wordpress 菜单 链接地址
  • 做招聘网站怎么样包装设计公司浙江
  • 想在百度做网站wordpress 关注微博
  • 关于互联网的网站江门众瞬网络科技有限公司
  • 教育机构的网站怎么做wordpress文章什么时候收录
  • 域名搭建网站代理记账网站怎么做
  • 网站前端开发培训资料凡客网站目录优化
  • 镇江网站制作费用濮阳网站设计公司
  • 软件网站建设基本流程超级seo外链