一个死锁的简单实现

墨蓝 2021-09-27 11:52 409阅读 0赞

死锁

两个或两个以上进程在执行任务的时候由于争夺资源等待资源而发生互相等待的状态。

四个必要条件

互斥条件(进程对锁分配的资源排他性的使用,即在一段时间内某资源只由一个进程占用,如果还有其他进程想要获得资源只能等待)

请求和保持条件(进程已经保持了至少一个资源但还申请了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己保持资源保持不放)

不剥夺条件(进程占用的资源在未使用完之前不可被剥夺,自己使用完之后释放)

环路等待条件(发生死锁时一定有进程存在资源环形的链)

死锁实现代码

  1. package com.hu.thread;
  2. import com.sun.org.apache.bcel.internal.generic.NEW;
  3. /**
  4. * 死锁
  5. * @author 胡永钦
  6. *
  7. */
  8. public class DeadLock implements Runnable {
  9. public int flag = 1;
  10. private static Object o1 = new Object();
  11. private static Object o2 = new Object();
  12. public void run() {
  13. if(flag == 1){
  14. synchronized (o1) {
  15. try {
  16. Thread.sleep(5000);
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. synchronized (o2) {
  21. System.out.print(1);
  22. }
  23. }
  24. }
  25. if(flag == 0){
  26. synchronized (o2) {
  27. try {
  28. Thread.sleep(5000);
  29. } catch (InterruptedException e) {
  30. e.printStackTrace();
  31. }
  32. synchronized (o1) {
  33. System.out.print(0);
  34. }
  35. }
  36. }
  37. }
  38. public static void main(String[] args) {
  39. DeadLock td1 = new DeadLock();
  40. DeadLock td2 = new DeadLock();
  41. td1.flag = 1;
  42. td2.flag = 0;
  43. new Thread(td1).start();
  44. new Thread(td2).start();
  45. }
  46. }

发表评论

表情:
评论列表 (有 0 条评论,409人围观)

还没有评论,来说两句吧...

相关阅读