什么是死锁?

由于两个或者多个线程互相持有对方所需要的资源,导致线程处于等待状态,造成死锁。

为什么会产生死锁(为什么会互相占用对方的资源)

  • 因为系统资源不足。
  • 进程运行推进的顺序不合适。
  • 资源分配不当等。

产生死锁的四个必要条件

互斥条件:一个资源每次只能被一个进程使用。

请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

手写死锁

public class DeadLock {public static void main(String[] args) {Object object1 = new Object();Object object2 = new Object();Thread thread1 = new Thread(new FirstThread(object1, object2));Thread thread2 = new Thread(new SecondThread(object1, object2));thread1.start();thread2.start();}
}class FirstThread implements Runnable {Object object1;Object object2;public FirstThread(Object object1, Object object2) {this.object1 = object1;this.object2 = object2;}@Overridepublic void run() {synchronized (object1) {// 获得锁对象1try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch block
                e.printStackTrace();}synchronized (object2) {// 获得锁对象2
}}}
}class SecondThread implements Runnable {Object object1;Object object2;public SecondThread(Object object1, Object object2) {this.object1 = object1;this.object2 = object2;}@Overridepublic void run() {synchronized (object2) {// 获得锁对象2try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch block
                e.printStackTrace();}synchronized (object1) {// 获得锁对象1
}}}
}

转载于:https://www.cnblogs.com/java-spring/p/10792062.html

死锁产生的原因及条件和手写死锁相关推荐

  1. 死锁产生的原因及条件、如何避免死锁

    一.死锁的定义 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造.成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等 ...

  2. 死锁的定义和产生条件以及如何避免死锁

    什么是死锁? 死锁是指多个线程在运行期间,因资源抢夺而造成的一种僵局,若无外力作用,它们都无法继续向前推进. 死锁产生的四个条件? 互斥条件:一个资源只能被一个线程独有 不剥夺条件:一个资源在被一个线 ...

  3. java死锁_Java死锁原理,手写死锁,解决死锁

    死锁:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等在对方释放资源. 都停止的情形.某一个同步块同时拥有两个以上对象的锁时,就会产生死锁问题. 手写 ...

  4. 「操作系统」深入理解死锁(什么是死锁?死锁形成条件?如何避免死锁?如何排查死锁?)

    「操作系统」深入理解死锁(什么是死锁?死锁形成条件?如何避免死锁?如何排查死锁?) 参考&鸣谢 什么是线程死锁?形成条件是什么?如何避免? Java圈子 面试官:如何快速排查死锁?如何避免死锁 ...

  5. 死锁的产生原因以及解决方案

    目录 1.什么是死锁 2.死锁的代码展示 3.死锁产生的原因 4.如何解决死锁问题 1.什么是死锁 死锁就是两个或两个以上线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力 ...

  6. Java中死锁产生的原因及解决方法

    一.什么是死锁 死锁就是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的现象,若无外力作用,他们都无法推进下去. 简单来说就是A和B若同时都有一个资源,在此之外还想拥有对方的资 ...

  7. 通过王者自走棋学操作系统-死锁产生的4个条件

    前言 最近打王者自走棋,老是拿不了第一,我也太难了,特别每次都拿第二,都会被对面嘲讽一波,"打得很好",这就导致了没有能够好好听课,所以还是好好学习吧(笑),那么我就写下了自己对于 ...

  8. 多线程编程之死锁已经死锁产生的原因

    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 ...

  9. java死锁的产生原因,操作系统产生死锁的原因和处理策略

    作者:Cyapirear 素材来源:华为开发者论坛 产生死锁的原因 当进程需要以独占的方式访问资源时,可能会发生死锁(Deadlock).死锁是指两个或以上进程因竞争临界资源而造成的一种僵局,即一个进 ...

最新文章

  1. Vivado 随笔(3) 其他综合属性 dont_touch、fsm_encoding?
  2. python3连接oracle教程,Pycharm中Python3连接Oracle
  3. jsf如何通过按钮切换在同一个页面上的非公共部分显示不同的内容
  4. 004-docker常用命令[二]-容器操作ps,top,attach,export
  5. IIS内部错误:500之解决方案
  6. python嵩天第二版第五章_如何避免从入门到放弃——python小组学习复盘
  7. mysql查询游标_数据库查询,游标。
  8. Redis+Nginx+设计模式+Spring全家桶+Dubbo+阿里P8技术精选文档
  9. js读取本地excel到html,JS读取本地EXCEL文件
  10. plsql 导出分区_plsql批量导出数据库数据
  11. 计算机网络应用班级口号霸气押韵,跑操口号大全(精选50句)
  12. 我的奋斗,不需要任何理由
  13. 《思考力---引爆无限潜能》书摘(一)
  14. 宁西铁路线 宁合线 宁西铁路
  15. Fibonacci数列Linux程序,使用fork()调用计算Fibonacci数列
  16. 使用XUL开发跨平台桌面应用
  17. 图片尺寸px怎么转换成厘米?在线图片尺寸换算工具怎么用?
  18. python处理PPOCRLabel标注的数据用于LPRNet与Yolo的训练
  19. 制作一个简单HTML家乡网页(HTML+CSS)---家乡邢台 页面7个
  20. 2022-1-14 牛客C++项目 —— exec函数族学习

热门文章

  1. css媒体查询(手机、平板、PC)
  2. Linux 应用---make及makefile的编写
  3. python Json的一点收获,自定义序列化方法
  4. 文件指针和文件描述符之间的相互转换 fd----fp 和 fp----fd
  5. [Redux/Mobx] redux的thunk作用是什么?
  6. React开发(247):react项目理解 学会debugger
  7. 前端学习(3221):类式组件中的props
  8. 工作408- Module build failed (from ./node_modules/sass-loader/dist/cjs.js)
  9. [html] 你知道什么是反向链接吗?它有什么应用场景呢?
  10. [html] 为什么我们要使用web workers?