java多线程(Thread)之死锁(Deadlock)
  TEZNKK3IfmPf 2023年11月12日 27 0

概念:死锁是一种在多线程协作时永久堵塞的一种状态.(Deadlock describes a situation where two or more threads are blocked forever)。

场景举例一:A和B是好伙伴,他们见面是通常先向对方鞠躬,然后保持鞠躬的状态,等待对方回应自己的鞠躬。(通常情况下A先鞠躬,然后B鞠躬回应A,A起身)---->(而后后B鞠躬,A鞠躬回应B),见面礼仪结束。但当A和B同时鞠躬的时候就尴尬了。因为A和B都这时都在等待对方起来。

代码如下

public class Deadlock {
    static class Friend {
        private final String name;

        public Friend(String name) {
            this.name = name;
        }

        public String getName() {
            return this.name;
        }

        public synchronized void bow(Friend bower) {
            System.out.format("%s 向  %s 鞠躬, %s 等待%s回应他的鞠躬", this.name, bower.getName(), this.name, bower.getName());
            System.out.println();
            bower.bowBack(this);
        }

        public synchronized void bowBack(Friend bower) {
            System.out.format("%s 回应  %s 的鞠躬", this.name, bower.getName());
            System.out.println();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        final Friend alphonse = new Friend("A");
        final Friend gaston = new Friend("B");
        new Thread(new Runnable() {
            public void run() {
                alphonse.bow(gaston);
            }
        }).start();
        new Thread(new Runnable() {
            public void run() {
                gaston.bow(alphonse);
            }
        }).start();
    }
}

结果

java多线程(Thread)之死锁(Deadlock)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   25天前   51   0   0 java
  TEZNKK3IfmPf   2024年05月31日   55   0   0 java
TEZNKK3IfmPf