zoukankan      html  css  js  c++  java
  • 多线程,死锁,DeadLock

    /*
    死锁。
    同步中嵌套同步。
    
    */
    
    class Ticket implements Runnable
    {
        private  int tick = 1000;
        Object obj = new Object();
        boolean flag = true;
        public  void run()
        {
            if(flag)
            {
                while(true)
                {
                    synchronized(obj)
                    {
                        show();
                    }
                }
            }
            else
                while(true)
                    show();
        }
        public synchronized void show()//this
        {
            synchronized(obj)
            {
                if(tick>0)
                {
                    try{Thread.sleep(10);}catch(Exception e){}
                    System.out.println(Thread.currentThread().getName()+"....code : "+ tick--);
                }
            }
        }
    }
    
    
    class  DeadLockDemo
    {
        public static void main(String[] args) 
        {
    
            Ticket t = new Ticket();
    
            Thread t1 = new Thread(t);
            Thread t2 = new Thread(t);
            t1.start();
            try{Thread.sleep(10);}catch(Exception e){}
            t.flag = false;
            t2.start();
    
    
        }
    }

     第二个例子:

    class Test implements Runnable
    {
        private boolean flag;
        Test(boolean flag)
        {
            this.flag = flag;
        }
    
        public void run()
        {
            if(flag)
            {
                while(true)
                {
                    synchronized(MyLock.locka)
                    {
                        System.out.println(Thread.currentThread().getName()+"...if locka ");
                        synchronized(MyLock.lockb)
                        {
                            System.out.println(Thread.currentThread().getName()+"..if lockb");                    
                        }
                    }
                }
            }
            else
            {
                while(true)
                {
                    synchronized(MyLock.lockb)
                    {
                        System.out.println(Thread.currentThread().getName()+"..else lockb");
                        synchronized(MyLock.locka)
                        {
                            System.out.println(Thread.currentThread().getName()+".....else locka");
                        }
                    }
                }
            }
        }
    }
    
    
    class MyLock
    {
        static Object locka = new Object();
        static Object lockb = new Object();
    }
    
    class  DeadLockTest
    {
        public static void main(String[] args) 
        {
            Thread t1 = new Thread(new Test(true));
            Thread t2 = new Thread(new Test(false));
            t1.start();
            t2.start();
        }
    }
  • 相关阅读:
    37. 解数独
    皮尔逊相关系数的计算以及数据的描述性统计
    商业微信小程序开发实战---1
    51. N皇后
    拟合算法
    216. 组合总和 III
    打印心性
    指针
    第五天
    循环 和 宏
  • 原文地址:https://www.cnblogs.com/vaer/p/4369862.html
Copyright © 2011-2022 走看看