美文网首页
简单实现一个死锁例子(哲学家吃饭)

简单实现一个死锁例子(哲学家吃饭)

作者: 不知不怪 | 来源:发表于2022-01-08 13:35 被阅读0次

1.代码

package com.gzz.deadlock.v1;
import static com.gzz.c99_tools.Sleeper.sleepMillis;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TestDeadLock {
    public static void main(String[] args) {
        Chopstick c1 = new Chopstick("1");
        Chopstick c2 = new Chopstick("2");
        Chopstick c3 = new Chopstick("3");
        Chopstick c4 = new Chopstick("4");
        Chopstick c5 = new Chopstick("5");
        new Thread(() -> PhilosopherEat(c1, c2), "苏格拉底").start();
        new Thread(() -> PhilosopherEat(c2, c3), "柏拉图").start();
        new Thread(() -> PhilosopherEat(c3, c4), "亚里士多德").start();
        new Thread(() -> PhilosopherEat(c4, c5), "赫拉克利特").start();
        new Thread(() -> PhilosopherEat(c5, c1), "阿基米德").start();
    }

    static void PhilosopherEat(Chopstick left, Chopstick right) {
        while (true) {
            synchronized (left) {// 尝试获得左手筷子
                synchronized (right) {// 尝试获得右手筷子
                    log.info("使用{}和{}eating...", left, right);
                                        try {
                                            TimeUnit.MILLISECONDS.sleep(150);
                                        } catch (InterruptedException e) {
                                            e.printStackTrace();
                                        }
                }
            }
        }
    }
}

@Data
@AllArgsConstructor
class Chopstick {
    String name;

    @Override
    public String toString() {
        return "筷子" + name;
    }
}

2.命令jps, jstack

image.png image.png

相关文章

网友评论

      本文标题:简单实现一个死锁例子(哲学家吃饭)

      本文链接:https://www.haomeiwen.com/subject/oiuecrtx.html