死锁-嵌套容易发生死锁

朱雀 2022-06-10 00:45 286阅读 0赞

直接看例子:

  1. public class DealThread implements Runnable{
  2. public String username;
  3. public Object lock1=new Object();
  4. public Object lock2=new Object();
  5. public void setFlag(String username){
  6. this.username=username;
  7. }
  8. @Override
  9. public void run() {
  10. if(username.equals("a")){
  11. synchronized (lock1){
  12. try {
  13. System.out.println("username = "+username);
  14. Thread.sleep(3000);
  15. } catch (InterruptedException e) {
  16. e.printStackTrace();
  17. }
  18. synchronized (lock2){
  19. System.out.println("按lock1->lock2代码顺序执行了");
  20. }
  21. }
  22. }
  23. if(username.equals("b")){
  24. synchronized (lock2){
  25. try {
  26. System.out.println("username = "+username);
  27. Thread.sleep(3000);
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. synchronized (lock1){
  32. System.out.println("按 lock2->lock1代码顺序执行了");
  33. }
  34. }
  35. }
  36. }
  37. }
  38. public class Run {
  39. public static void main(String[] args){
  40. try {
  41. DealThread t1=new DealThread();
  42. t1.setFlag("a");
  43. Thread thread1=new Thread(t1);
  44. thread1.start();
  45. Thread.sleep(100);
  46. t1.setFlag("b");
  47. Thread thread2=new Thread(t1);
  48. thread2.start();
  49. } catch (InterruptedException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. }

你在的等我,我在等你,就永远等了= =(要行动起来啊)

发表评论

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

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

相关阅读

    相关 发生怎么办

    > 锁的定义:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。竞争的资源可以是:锁、网络连接、

    相关

    一.死锁发生的条件 死锁的发生必须具备下列4个必要条件: –互斥:任一时刻只允许一个进程使用资源 –请求和保持:进程在请求其余资源时,不主动释放已经占用的资源 –非剥夺

    相关

    死锁: 指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统

    相关

    一、死锁的概念   死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。若无外力作用,事务都将无法推进下去。   解决死锁问题最简单的方式