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

湖北省建设主管网站山东最新通知今天

湖北省建设主管网站,山东最新通知今天,seo页面如何优化,同城网站建设java中线程死锁及避免如何避免Java中的死锁#xff1f; 是Java面试中最受欢迎的问题之一#xff0c;也是本季多线程的风格#xff0c;主要是在高层提出#xff0c;并带有很多后续问题。 尽管问题看起来很基础#xff0c;但是一旦您开始深入研究#xff0c;大多数Java开发… java中线程死锁及避免 如何避免Java中的死锁 是Java面试中最受欢迎的问题之一也是本季多线程的风格主要是在高层提出并带有很多后续问题。 尽管问题看起来很基础但是一旦您开始深入研究大多数Java开发人员就会陷入困境。 面试问题始于“什么是僵局” 当两个或多个线程正在等待彼此释放所需的资源锁定并无限期陷入困境时答案很简单这种情况称为死锁。 它只会在多任务 或多线程的情况下发生。 如何在Java中检测死锁 尽管可能会有很多答案但我的版本是如果我看到一个嵌套的同步块或从另一个调用一个同步方法或者试图锁定另一个对象那么我将看一下代码那么很有可能发生死锁如果开发人员不是很谨慎。 另一种方法是在运行应用程序时实际上陷入僵局时找到它尝试进行线程转储在Linux中您可以通过“ kill -3”命令执行此操作这将在应用程序日志文件中打印所有线程的状态您可以看到哪个线程锁定在哪个对象上。 您可以使用fastthread.io之类的工具来分析该线程转储该工具允许您上载线程转储并进行分析。 另一种方法是使用jConsole / VisualVM 它将确切显示正在锁定的线程以及在哪个对象上。 编写Java程序会导致死锁 一旦回答了前面的问题他们可能会要求您编写代码这会导致Java死锁 这是我的版本之一 /*** Java program to create a deadlock by imposing circular wait.* * author WINDOWS 8**/ public class DeadLockDemo {/** This method request two locks, first String and then Integer*/public void method1() {synchronized (String.class) {System.out.println(Aquired lock on String.class object);synchronized (Integer.class) {System.out.println(Aquired lock on Integer.class object);}}}/** This method also requests same two lock but in exactly* Opposite order i.e. first Integer and then String. * This creates potential deadlock, if one thread holds String lock* and other holds Integer lock and they wait for each other, forever.*/public void method2() {synchronized (Integer.class) {System.out.println(Aquired lock on Integer.class object);synchronized (String.class) {System.out.println(Aquired lock on String.class object);}}} } 如果method1和method2都将被两个或多个线程调用则死锁的可能性很大因为如果线程1在执行method1时获得Sting对象的锁而线程2在执行method2时获得Integer对象的锁 都将互相等待以释放对Integer的锁定 而String继续进行下去这将永远不会发生。 该图准确地演示了我们的程序其中一个线程在一个对象上持有一个锁然后等待另一线程持有的其他对象锁。 您可以看到线程1想要锁定对象2的锁该对象2由线程2持有而线程2想要锁定对象1的锁该对象1由线程1持有。由于没有线程愿意放弃因此存在死锁并且线程2 Java程序被卡住。 如何避免Java中的死锁 现在面试官进入最后一部分在我看来这是最重要的部分。 您如何解决代码中的死锁 或如何避免Java中的死锁 如果您仔细查看了上面的代码那么您可能已经发现造成死锁的真正原因不是多个线程而是它们请求锁定的方式如果您提供有序访问则问题将得到解决。 这是我的固定版本它通过无效循环循环等待来避免死锁 而没有抢占 这是需要死锁的四个条件之一。 public class DeadLockFixed {/*** Both method are now requesting lock in same order, first Integer and then String.* You could have also done reverse e.g. first String and then Integer,* both will solve the problem, as long as both method are requesting lock* in consistent order.*/public void method1() {synchronized (Integer.class) {System.out.println(Aquired lock on Integer.class object);synchronized (String.class) {System.out.println(Aquired lock on String.class object);}}}public void method2() {synchronized (Integer.class) {System.out.println(Aquired lock on Integer.class object);synchronized (String.class) {System.out.println(Aquired lock on String.class object);}}} } 现在将没有任何死锁因为这两个方法都以相同的顺序访问Integer和String类文字的锁。 因此如果线程A获得了对Integer对象的锁定则直到线程A释放Integer锁定后线程B才会继续进行即使线程B持有字符串锁线程A也不会被阻塞因为现在线程B不会期望线程A释放整数锁可继续进行。 感谢您阅读本文。 如果您喜欢这篇文章请与您的朋友和同事分享。 如果您有任何疑问或反馈请留言。 翻译自: https://www.javacodegeeks.com/2018/08/avoid-deadlock-java-threads.htmljava中线程死锁及避免
http://wiki.neutronadmin.com/news/253238/

相关文章:

  • 国内网站模板网站建设教程公司
  • 用绿色做图标的网站山东济南报备小程序
  • 招远做网站案例信阳网站建设招聘
  • 有趣网站之家网站流量统计查询
  • 什么网站可以做时间加减怎样建立自己的个人网站
  • 网站开发制作全包计算机(网站建设与维护)
  • 自定义网站模块邯郸中材建设有限责任公司网站
  • pc网站平台怎样制作网页超链接
  • 苏州吴中区专业做网站three.js 做的网站
  • 网站建设实验小结免费空间访问
  • 建设网站和公告号的意义金华网站建设微信开发
  • 无锡新区企业网站推广万博法务网站
  • 优秀的电商设计网站网站开发服务器
  • 唐山网站建设开发设计公司wordpress支持哪一版本php
  • 国外做仿牌网站济南中企动力怎么样
  • 宿迁市建设局投诉网站首页网站引导页作用
  • 网站开发课程教学目标广东500强企业名单一览表
  • 学习网站建设难吗沈阳专业网站制作团队
  • 深圳自建站有哪些大公司浙江省网站域名备案
  • 网站模板下载百度云链接怎么做的wordpress 授权插件
  • 搭建网站是什么中国交通建设股份有限公司官网
  • 网站名称如何设置招聘网站设计师要求
  • 网站索引量怎么做网站小图标
  • 关于公司网站开发的事项网站怎么在移动端推广
  • 宁波哪家做网站好一流的高密网站建设
  • 金泉网做网站多少钱ftp上传网站之后怎么做
  • 新手做网站怎么上传系统微网站免
  • 广州营销型企业网站建设网站推广服务网站连锁
  • 做暖dnf动态ufo网站网站点击量在哪里看
  • 标准网站建设合同模板网站