线程死锁

ゞ 浴缸里的玫瑰 2021-10-18 09:36 523阅读 0赞

20190811092629898.png

  1. package com.vince;
  2. /**
  3. * 多线程要进行资源的共享,就需要同步,但同步过多,就可能造成死锁
  4. * 死锁的操作一般是在程序运行的时候才有可能出现
  5. * 线程死锁:在一个同步方法中调用了另一个对象的同步方法,可能产生死锁
  6. */
  7. public class DeadThreadDemo {
  8. public static void main(String[] args) {
  9. new DeadThread();
  10. }
  11. }
  12. //顾客
  13. class Customer{
  14. public synchronized void say(Waiter w){
  15. System.out.println("顾客说:先吃饭再买单!");
  16. w.doService();
  17. }
  18. public synchronized void doService(){
  19. System.out.println("同意了,买完单再吃饭!");
  20. }
  21. }
  22. //服务员
  23. class Waiter{
  24. public synchronized void say(Customer c){
  25. System.out.println("服务员说:先买单再吃饭!");
  26. c.doService();
  27. }
  28. public synchronized void doService(){
  29. System.out.println("同意了,吃完饭再买单!");
  30. }
  31. }
  32. //死锁线程
  33. class DeadThread implements Runnable{
  34. Customer c = new Customer();
  35. Waiter w = new Waiter();
  36. public DeadThread(){
  37. new Thread(this).start();
  38. w.say(c);
  39. }
  40. @Override
  41. public void run() {
  42. c.say(w);
  43. }
  44. }

在IDEA中测试不出来死锁现象,在Eclispse和控制台可以此时出来

  1. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pzMTM0MjA4NDc3Ng_size_16_color_FFFFFF_t_70][]

控制台测试:

20190811093105318.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pzMTM0MjA4NDc3Ng_size_16_color_FFFFFF_t_70 1

发表评论

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

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

相关阅读

    相关 线

    线程死锁是多线程中最头疼的问题,一旦进入线程死锁,很多时候只能通过外部进程重启才能解决问题 线程到达死锁的四个条件: 互斥条件:一个资源每次只能被一个线程使用 资源独占条

    相关 线

    一、死锁概念 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便

    相关 线

    简述:          星期一,新的的一周开始,天气晴朗,风和日丽。本是一个非常不错的心情,突然微信头像闪烁,果不其然又爬虫出问题了,可谓是一入爬虫深似海,项目稳定才见鬼。

    相关 线

    虽然同步锁机制解决了线程安全问题,但是也带来一些弊端:     1. 效率会降低,每次都需要判断锁的状态     2. 可能引发死锁(彼此占用所需要的资源),出现的概率非常小,

    相关 线

    先简单用生活列子介绍死锁,          2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都