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

农业技术推广网站百度云盘做网站

农业技术推广网站,百度云盘做网站,公司名称起名大全免费,网站做快照前言 死锁是在开发中经常会遇到的一个问题,指的是多个进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象。 1. 死锁的成因 死锁的产生必须要同时满足以下四个条件:互斥条件(Mutual Exclusion…

前言

死锁是在开发中经常会遇到的一个问题,指的是多个进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象。

1. 死锁的成因

死锁的产生必须要同时满足以下四个条件:

  1. 互斥条件(Mutual Exclusion)
    资源一次只能由一个线程占用,其他线程必须等待该资源释放,不能使用。

  2. 占有并等待(Hold and Wait)
    线程已经持有至少一个资源,并且正在等待获取其他被占用的资源。

  3. 非抢占条件(No Preemption)
    已分配给进程的资源不能被其他线程强行夺取,必须由线程自行释放。

  4. 循环等待(Circular Wait)
    存在一个线程等待的循环链,每个进程都在等待下一个进程所占用的资源。

以下是一个典型的死锁案例:

    public static void main(String[] args) {//死锁案例Object lock1 = new Object();Object lock2 = new Object();Thread t1 = new Thread(() -> {synchronized (lock1) {System.out.println("线程1获取到锁1,等待锁2");try {Thread.sleep(100); // 确保线程2能获取到锁2} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock2) {System.out.println("线程1获取到锁2");}}});Thread t2 = new Thread(() -> {synchronized (lock2) {System.out.println("线程2获取到锁2,等待锁1");try {Thread.sleep(100); // 确保线程1能获取到锁1} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock1) {System.out.println("线程2获取到锁1");}}});}

这四个条件同时成立,就会形成死锁,当我们打破其中任意一个条件,死锁就会消失。

2. 解决死锁问题

上述提到的四个条件,前三个条件都不好打破,第四个是我们最容易破坏的条件,所以为了解决死锁问题,我们最常用的方法就是破坏”循环等待“。

为了破坏这个条件,我们使用锁排序,我们可以把所有的锁进行编号,规定线程按照固定的编号顺序来获取锁,这样就可以避免环路的产生。

就如上面展示的死锁代码,我们把获取锁的顺序进行修改,就可以防止死锁的产生:

        //死锁案例Object lock1 = new Object();Object lock2 = new Object();Thread t1 = new Thread(() -> {synchronized (lock1) {try {Thread.sleep(100); } catch (InterruptedException e) {e.printStackTrace();}synchronized (lock2) {System.out.println("线程1获取到锁2");}}});Thread t2 = new Thread(() -> {synchronized (lock1) {try {Thread.sleep(100); } catch (InterruptedException e) {e.printStackTrace();}synchronized (lock2) {System.out.println("线程2获取到锁1");}}});}

这里统一了线程对锁的获取顺序,组织了等待环路的产生。

总结

本篇文章简单的介绍了我们常常遇到的死锁问题,讲述了死锁的成因及其解决方法,希望通过这篇文章,能够加深你对死锁的理解,能够轻松的发现并应对可能产生的死锁问题。


文章转载自:

http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://00000000.gtcym.cn
http://www.dtcms.com/wzjs/602615.html

相关文章:

  • 国外效果图网站游戏策划
  • 合肥seo网站优化培训广州知名的网站建设公司
  • 装潢建筑公司网站设计外包人力资源公司
  • 阳西哪里有做网站手机做网站价格
  • 天津网站设计诺亚科技查看公司股票的网站
  • 网站按钮样式wordpress导航栏小图标
  • 网站广告推送怎么做网站彩票代理怎么做
  • 网站建设方案硬件支撑wordpress慢 google
  • 浅谈高校门户网站建设的规范标准做网站时间
  • 深圳网站搭建多少钱音乐网站 源码
  • 织梦网站熊掌号改造怎么做做移门配件的网站
  • 福州做网站设计外包专业商城网站设计
  • 规划网站总结千博企业网站管理系统旗舰版
  • 东莞外贸网站推广保定网站建设兼职
  • 创建一个公司网站需要多少钱网站vip功能怎么实现
  • 免费企业网站系统跨境电商建站
  • 电商网站建设的意义把wordpress去除谷歌字体
  • 手机网站设计立找亿企邦深圳集团网站开发网站开发公司
  • 上海工商网上办事大厅官网seo外链软件
  • 中企动力做的网站经常打不开海络网站
  • 济南住建局官方网站亚马逊网站风格
  • 襄阳住房城乡建设厅官方网站网站设计培训哪里好
  • 免费服务器搭建网站详细教程太原网站建设技术托管
  • 微商手机网站制作公司怎么在dw里做网站
  • 网站策划ppt开什么工作室最稳定
  • 网站建设小组五类成员福州网站制作官网
  • 济宁苍南网站建设营销型网站和传统网站区别
  • 网站改版建设的合同腾讯云海外服务器
  • 河南省建设厅网站103建设工程交易网
  • 门网站制作合肥网站建设哪家专业