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

永嘉网站建设北京网站备案的地址

永嘉网站建设,北京网站备案的地址,宁波网站seo诊断工具,如何搭建个人博客破坏占用且等待就可以避免死锁产生,以上一节中的循环等待代码来看: // 一次性申请转出账户和转入账户,直到成功 while(!actr.apply(this, target));如果apply()操作耗时非常端,而且并发冲突量不大时,这个方…

破坏占用且等待就可以避免死锁产生,以上一节中的循环等待代码来看:

// 一次性申请转出账户和转入账户,直到成功
while(!actr.apply(this, target));

如果apply()操作耗时非常端,而且并发冲突量不大时,这个方案是不错的,因为这种场景下,循环上几次或者几十次就可以一次性获取锁,执行业务。但是如果apply()操作耗时长,或者并发冲突量很大的时候,循环等待就可能循环上万次才能获取锁,会导致CPU使用率升高,影响环境的问题。

这种场景,更好的解决方案是:如果线程要求的条件不满足,则线程阻塞自己,进入等待状态,在满足线程要求的条件后,通知等待的线程重新执行。

完整的等待-通知机制:线程首先获取互斥锁,当线程要求的条件不满足时,释放互斥锁,进入等待状态;当要求的条件满足时,通知等待的线程,重新获取互斥锁。

用synchronized实现等待-通知机制

在Java语言中,使用synchronized配合wait()、notify()、notifyAll()这三个方法就可以轻松实现。

image

如图,左边一个等待队列,同一时刻,只允许一个线程进入synchronized保护的临界区,当有一个线程进入临界区后,其他线程只能进入图中左边的队列等待,这个等待队列和互斥锁是一对一的关系,每个互斥锁都有自己独立的等待队列。

进入临界区后,由于不满足部分条件,需要进入等待状态,Java对象的wait()方法就能满足这个需求,当调用wait()方法后,当前线程就会被阻塞,并且进入右侧的等待队列,这个等待队列也是互斥锁的等待队列。线程在进入右侧等待队列的同时,会释放持有的互斥锁,线程释放后,其他线程就有机会获得锁,进入临界区。

当线程条件满足时,通知等待的线程,可以使用Java对象的notify()和notifyAll()方法,通知等待队列中的线程,条件曾经满足过,可以再次尝试获取锁,并判断条件是否满足。

对之前的代码进行优化

 while(条件不满足) {wait();}
class Allocator {private List<Object> als;// 一次性申请所有资源synchronized void apply(Object from, Object to){// 经典写法while(als.contains(from) ||als.contains(to)){try{wait();}catch(Exception e){}   } als.add(from);als.add(to);  }// 归还资源synchronized void free(Object from, Object to){als.remove(from);als.remove(to);notifyAll();}
}

用notifyAll()而没有使用notify(),是因为notify()会随机通知等待队列中的一个线程,而notifyAll()会通知等待队列中所有的线程,第一反应是同一时间只有一个线程进入临界区,用notify()就可以了,实际上notify()可能导致某些线程永远不会被通知到。

学习来源:极客时间 《Java 并发编程实战》学习笔记 Day04


文章转载自:

http://q8l0Etku.pLkrL.cn
http://wjSkkLNP.pLkrL.cn
http://qTzfzx8A.pLkrL.cn
http://IlNDaafe.pLkrL.cn
http://CYaoDlq9.pLkrL.cn
http://5rFlL8wP.pLkrL.cn
http://2PKGvzYg.pLkrL.cn
http://mEs2R6JD.pLkrL.cn
http://1XRVzogF.pLkrL.cn
http://aA1VmhJ6.pLkrL.cn
http://qNQPEi47.pLkrL.cn
http://hYR0WMmU.pLkrL.cn
http://28RSYXX1.pLkrL.cn
http://jgDkZzVd.pLkrL.cn
http://f70R4OjK.pLkrL.cn
http://oUIn2gNC.pLkrL.cn
http://FLf9jZ9V.pLkrL.cn
http://iOF9EJt8.pLkrL.cn
http://11XMGXOP.pLkrL.cn
http://su3Ghiz6.pLkrL.cn
http://DJINe21L.pLkrL.cn
http://01ZuNt1T.pLkrL.cn
http://707yFtRz.pLkrL.cn
http://hr43cEmT.pLkrL.cn
http://WKTmvLcG.pLkrL.cn
http://79CcijB2.pLkrL.cn
http://qiUuO08W.pLkrL.cn
http://arGJPj9w.pLkrL.cn
http://3OyFzoPG.pLkrL.cn
http://7X00GgWG.pLkrL.cn
http://www.dtcms.com/wzjs/701222.html

相关文章:

  • wordpress 网站白屏百度公司网站怎么建设
  • 学做网站论坛vip号码营销策略方案
  • app网站建设一般多少钱今天刚刚的最新新闻
  • 太姥山镇建设的网站打广告型的营销网站
  • 专门做商标的网站有哪些怎么建设课题网站
  • 打开上次浏览的网站网站首页导航栏
  • 网站模板下载后怎么用简历模板免费下载的网页
  • 网站的建设目标是什么宝安做棋牌网站建设找哪家效益快
  • 创造一个网站广州市城乡建设信息中心网站
  • 驻马店营销型网站建设做网站推广的好处
  • 外贸建站注意事项国内网站建设公司排名
  • 网站排行网站建设软件app
  • 关于网站得精神文明建设上海中企动力做网站多少钱
  • 有关网站空间不正确的说法是怎么样用ps做网站
  • 模块网站弊端移动互联网开发报告总结
  • 百度推广网站备案便民信息免费发布平台
  • 陕西网站建站专做鞋子的网站
  • 服务器网站慢的原因兰州做网络优化
  • 网站建设图片按钮中国 庆阳
  • 鲜花加盟网站建设中国建设人才网登录
  • 莆田网站建设培训给个网站做填空题
  • 做一网站需要哪些语言wordpress相册主题
  • 购物网站功能详细介绍wordpress面包屑导航
  • 网站页面设计中国建设银行积分兑换网站
  • 盱眙县建设局网站网站个性化
  • 合肥网页网站制作设计坞在线海报制作
  • 搜索引擎是网站吗坪山做网站公司
  • 做我的世界皮肤壁纸的网站dedeseo网站
  • 网站被镜像怎么办有关优化网站建设的书籍
  • 佛山专业的网站建设公司东莞市企业信息公示网