我把Oracle官方的死锁程序给你吧,既简单,又有趣
- /**
- * 死锁示例:
- * 张三李四相互鞠躬问候。
- * 张三看到李四向自己鞠躬后,就鞠躬回礼(调用李四的bowBack方法)。
- * 李四看到张三向自己鞠躬后,也鞠躬回礼(调用张三的bowBack方法)。
- * 张三拿着张三对象的锁,想调李四的bowBack方法
- * 李四拿着李四对象的锁,想调张三的bowBack方法
- * 互相拿着对方需要的锁,造成死锁
- *
- * @author lihao
- *
- */
- public class DeadlockDemo {
-
- public static void main(String[] args) {
- final Friend zhangsan = new Friend("张三");
- final Friend lisi = new Friend("李四");
- Thread t1 = new Thread(new Runnable() {
- public void run() { zhangsan.bow(lisi); }
- }); // 张三向李四鞠躬
- Thread t2 = new Thread(new Runnable() {
- public void run() { lisi.bow(zhangsan); }
- }); // 李四向张三鞠躬
-
- t1.start();
- t2.start();
- }
- }
- class Friend {
- private String name;
- public Friend(String name) {
- this.name = name;
- }
- public String getName() {
- return this.name;
- }
- public synchronized void bow(Friend bower) {
- System.out.println(this.name + "说:" + bower.getName() + "向我鞠躬问候了");
- bower.bowBack(this);
- }
- public synchronized void bowBack(Friend bower) {
- System.out.println(this.name + "说:" + bower.getName() + "向我鞠躬回礼了");
- }
- }
复制代码 |