• java基础---设计一个死锁


     
    /**
    * 一个简单的死锁类
    * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒
    * 而td1在睡眠的时候另一个flag==0的对象(td2)线程启动,先锁定o2,睡眠500毫秒
    * td1睡眠结束后需要锁定o2才能继续执行,而此时o2已被td2锁定;
    * td2睡眠结束后需要锁定o1才能继续执行,而此时o1已被td1锁定;
    * td1、td2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。
    */ 
    public class DeadLock implements Runnable { 
        public int flag = 1; 
        //静态对象是类的所有对象共享的 
        private static Object o1 = new Object(), o2 = new Object(); 
        @Override 
        public void run() { 
            System.out.println("flag=" + flag); 
            if (flag == 1) { 
                synchronized (o1) { 
                    try { 
                        Thread.sleep(500); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                    synchronized (o2) { 
                        System.out.println("1"); 
                    } 
                } 
            } 
            if (flag == 0) { 
                synchronized (o2) { 
                    try { 
                        Thread.sleep(500); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                    synchronized (o1) { 
                        System.out.println("0"); 
                    } 
                } 
            } 
        } 
       
        public static void main(String[] args) { 
               
            DeadLock td1 = new DeadLock(); 
            DeadLock td2 = new DeadLock(); 
            td1.flag = 1; 
            td2.flag = 0; 
            //td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。 
            //td2的run()可能在td1的run()之前运行 
            new Thread(td1).start(); 
            new Thread(td2).start(); 
       
        } 
    }
  • 相关阅读:
    C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用
    Protocol Buffers 语法指南
    ERP、SCM及电子商务关系分析
    ]进程注入是王道之为NhibernateProfiler增加“附加到进程”功能原理(源码)
    架构师职位与软件文档的思考
    OSGI:从面向接口编程来理解OSGI
    开源的.NET桌面程序自动更新组件 ——Sharp Updater 2.1发布
    C#开源文件实时监控工具Tail&TailUI
    SQL 存储过程入门(变量)
    Python入门笔记(2):基础(上)
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9546580.html
Copyright © 2020-2023  润新知