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

内网门户网站建设河南省做网站的企业

内网门户网站建设,河南省做网站的企业,crm管理系统定制,固定链接 wordpress 不起作用死锁是指两个或两个以上的进程#xff08;线程#xff09;在执行过程中#xff0c;由于竞争资 源或者由于彼此通信而造成的一种阻塞的现象#xff0c;若无外力作用#xff0c;它们都将无法推 进下去。此时称系统处于死锁状态或系统产生了死锁#xff0c;这些永远在互相… 死锁是指两个或两个以上的进程线程在执行过程中由于竞争资 源或者由于彼此通信而造成的一种阻塞的现象若无外力作用它们都将无法推 进下去。此时称系统处于死锁状态或系统产生了死锁这些永远在互相等待的进 程线程称为死锁进程线程。 多个线程同时被阻塞它们中的一个或者全部都在等待某个资源被释放。由于线 程被无限期地阻塞因此程序不可能正常终止。 如下图所示线程 A 持有资源 2线程 B 持有资源 1他们同时都想申请对方 的资源所以这两个线程就会互相等待而进入死锁状态。 下面通过一个例子来说明线程死锁代码模拟了上图的死锁的情况 public class DeadLockDemo {private static final Object resource1 new Object();//资源 1private static final Object resource2 new Object();//资源 2public static void main(String[] args) {new Thread(() - {synchronized (resource1) {System.out.println(Thread.currentThread().getName() get resource1);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() waiting get resource2);synchronized (resource2) {System.out.println(Thread.currentThread().getName() get resource2);}}}, 线程 1---).start();new Thread(() - {synchronized (resource2) {System.out.println(Thread.currentThread().getName() get resource2);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() waiting get resource1);synchronized (resource1) {System.out.println(Thread.currentThread().getName() get resource1);}}}, 线程 2---).start();} }输出结果 线程 1---get resource1 线程 2---get resource2 线程 2---waiting get resource1 线程 1---waiting get resource2 线程 A 通过 synchronized (resource1) 获得 resource1 的监视器锁然后通 过 Thread.sleep(1000) 让线程 A 休眠 1s 为的是让线程 B 得到CPU执行权然 后获取到 resource2 的监视器锁。线程 A 和线程 B 休眠结束了都开始企图请求 获取对方的资源然后这两个线程就会陷入互相等待的状态这也就产生了死 锁。上面的例子符合产生死锁的四个必要条件。 形成死锁的四个必要条件是什么 1. 互斥条件线程(进程)对于所分配到的资源具有排它性即一个资源只 能被一个线程(进程)占用直到被该线程(进程)释放 2. 请求与保持条件一个线程(进程)因请求被占用资源而发生阻塞时对 已获得的资源保持不放。 3. 不剥夺条件线程(进程)已获得的资源在末使用完之前不能被其他线程 强行剥夺只有自己使用完毕后才释放资源。 4. 循环等待条件当发生死锁时所等待的线程(进程)必定会形成一个环 路类似于死循环造成永久阻塞 如何避免线程死锁 我们只要破坏产生死锁的四个条件中的其中一个就可以了。 破坏互斥条件 这个条件我们没有办法破坏因为我们用锁本来就是想让他们互斥的临界资源 需要互斥问。 破坏请求与保持条件 一次性申请所有的资源。 破坏不剥夺条件 占用部分资源的线程进一步申请其他资源时如果申请不到可以主动释放它占 有的资源。 破坏循环等待条件 靠按序申请资源来预防。按某一顺序申请资源释放资源则反序释放。破坏循环 等待条件。 我们对线程 2 的代码修改成下面这样就不会产生死锁了。 new Thread(() - {synchronized (resource1) {System.out.println(Thread.currentThread().getName() get resource1);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() waiting get resource2);synchronized (resource2) {System.out.println(Thread.currentThread().getName() get resource2);}} }, 线程 2---).start(); 输出结果 线程 1---get resource1 线程 1---waiting get resource2 线程 1---get resource2 线程 2---get resource1 线程 2---waiting get resource2 线程 2---get resource2 我们分析一下上面的代码为什么避免了死锁的发生? 线程 1 首先获得到 resource1 的监视器锁这时候线程 2 就获取不到了。然后 线程 1 再去获取 resource2 的监视器锁可以获取到。然后线程 1 释放了对 resource1、resource2 的监视器锁的占用线程 2 获取到就可以执行了。这样 就破坏了破坏循环等待条件因此避免了死锁。
http://www.dnsts.com.cn/news/126891.html

相关文章:

  • 网站建设保密协议范本网站设计开发中的具体步骤
  • 网站制作公司业务员中国十大国企公司排名
  • 新干县城乡建设局网站wordpress建站指南
  • 网站更新维护页面wordpress 内容采集 差价
  • 个人网站做项目福建建设信息网站
  • 网站怎么做充值系统下载wordpress安装说明
  • 大气宽屏企业网站源码自己怎么做机构网站
  • 陕西中洋建设工程有限公司网站国内较好的网站开发商城
  • 煤矿建设工程质量监督总站网站什么是网站设计与建设
  • 网站引导页设计青岛安装建设股份公司网站
  • 小型网站设计广州做网站哪个平台好
  • 小公司做网站用哪种服务器人工智能软件
  • 最优惠的网站优化专业网站排名优化公司
  • 东源县住房和城乡建设部网站网站做的好的公司名称
  • 郑州做网站软件个人网站建站目的
  • 对象储存做网站河南建设信息网一体化平台
  • 关联网站有那些餐饮品牌网站建设
  • 注册免费网站区域名天猫网站企业网站专业性诊断分析
  • 网站建设排名的公司淮南建设工程信息网站
  • 联想服务器怎么建设第二个网站做网站为什么要备案
  • 伊犁北京网站建设适合小企业的erp软件
  • 如何建设一个网站网页wordpress商城模版
  • 禅城网站建设企业公众号页面开发
  • 可信网站可信站点开发公司对施工单位管理措施
  • 手机微网站建设方案wordpress评论后不显示
  • 凡科怎样免费做网站郑州做网站那家做的好
  • 网站改版会影响收录吗成立一个网站平台要多少钱
  • wordpress影视采集网站网站开发过程中的方法
  • 公司的网站设计制作苏州市建设人才网官方网站
  • 网站的栏目和板块网络推广讲师培训