多线程-死锁

向右看齐 2022-06-02 07:57 402阅读 0赞
  1. /*
  2. 死锁:常见情景之一:同步的嵌套。
  3. */
  4. class Ticket implements Runnable
  5. {
  6. private int num = 100;
  7. Object obj = new Object();
  8. boolean flag = true;
  9. public void run()
  10. {
  11. if(flag)
  12. while(true)
  13. {
  14. synchronized(obj)
  15. {
  16. show();
  17. }
  18. }
  19. else
  20. while(true)
  21. this.show();
  22. }
  23. public synchronized void show()
  24. {
  25. synchronized(obj)
  26. {
  27. if(num>0)
  28. {
  29. try{Thread.sleep(10);}catch (InterruptedException e){}
  30. System.out.println(Thread.currentThread().getName()+".....sale...."+num--);
  31. }
  32. }
  33. }
  34. }
  35. class DeadLockDemo
  36. {
  37. public static void main(String[] args)
  38. {
  39. Ticket t = new Ticket();
  40. // System.out.println("t:"+t);
  41. Thread t1 = new Thread(t);
  42. Thread t2 = new Thread(t);
  43. t1.start();
  44. try{Thread.sleep(10);}catch(InterruptedException e){}
  45. t.flag = false;
  46. t2.start();
  47. }
  48. }

发表评论

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

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

相关阅读

    相关 线(16)

    死锁是一个复杂且需要仔细管理的问题,在设计多线程和多进程系统时,开发者应当尽可能通过合理的设计来预防死锁的发生。如果死锁不可避免,那么应该有检测和解决死锁的机制。预防、避...

    相关 线

    死锁: 如果一个资源被一个线程占用,而且无法释放线程资源,导致其他线程无法访问这个字段,一直处于等待状态,这样就会形成 线程死锁。 例子: package com.

    相关 线

    / 死锁:二个线程同时锁住一个变量时。 锁住一个变量之后,尽快操作完成解锁,解锁之前不要再锁住其它变量,否则会互锁(死锁)。 /

    相关 线代码

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

    相关 线

    峨眉山月半轮秋,影入平羌江水流 Java线程的死锁一直都是经典的多线程问题;因为不同的线程都在等待根本不可能被释放的锁,从而导致所有的任务都不能继续执行; 示例代码:

    相关 线

    同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。