A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hoshan1 中级黑马   /  2015-11-14 12:12  /  639 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

演练代码如下:
class Lock implements Runnable
{
        //定义一个判断标记
        private boolean flag;
        //通过构造函数给判断标记赋值
        Lock(boolean flag)
        {
                this.flag = flag;
        }
        //定义两个静态对象,用作锁对象
        static Object locka = new Object();
        static Object lockb = new Object();
        //复写run方法
        public void run()
        {
                if(flag)
                {
                        while(true)
                        {
                                 //定义嵌套锁并打印结果
                                synchronized(locka)
                                {
                                        System.out.println(Thread.currentThread().getName()+"...if locka ");
                                        synchronized(lockb)
                                        {
                                                System.out.println(Thread.currentThread().getName()+"..if lockb");                                       
                                        }
                                }
                        }
                }
                else
                {
                        while(true)
                        {
                                //定义嵌套锁并打印结果
                                synchronized(lockb)
                                {
                                        System.out.println(Thread.currentThread().getName()+"..else lockb");
                                        synchronized(locka)
                                        {
                                                System.out.println(Thread.currentThread().getName()+".....else locka");
                                        }
                                }
                        }
                }
        }
}
public class  Test
{
        public static void main(String[] args)
        {
                //定义两个线程
                Thread t1 = new Thread(new Lock(true),"我是线程一");
                Thread t2 = new Thread(new Lock(false),"我是线程二");
                //开启两个线程
                t1.start();
                t2.start();
        }
}

通过此代码演练,可以让我们知道死锁是怎么形成的,避免后续的程序设计中犯相同的错误

3 个回复

正序浏览
先顶再看
回复 使用道具 举报
哦,这样啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马