解决方案 »

  1.   


    public class TestLock
    {    //资源A以及锁A
        public static String sourceA = "获得资源A";    //资源B以及锁B
        public static String sourceB = "获得资源B";    public static void main(String[] args)
        {
            Thread thread1 = new MyLockThread1();
            thread1.setName("thread1");
            Thread thread2 = new MyLockThread2();
            thread2.setName("thread2");
            
            thread1.start();
            thread2.start();
        }
    }
    class MyLockThread1
        extends Thread
    {    public void run()
        {
            synchronized (TestLock.sourceA)
            {
                System.out.println(this.getName()+":"+TestLock.sourceA);
                try
                {
                    //停顿5秒获取另一个资源
                    Thread.sleep(5000);
                }
                catch (InterruptedException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(this.getName()+":尝试获取资源B...");
                synchronized (TestLock.sourceB)
                {
                    System.out.println(TestLock.sourceB);                try
                    {
                        //停顿5秒进程结束
                        Thread.sleep(5000);
                    }
                    catch (InterruptedException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            System.out.println(this.getName()+":走到这里,说明没有发生锁,线程正常结束。");
        }
    }
    class MyLockThread2
        extends Thread
    {    public void run()
        {
            synchronized (TestLock.sourceB)
            {
                System.out.println(this.getName()+":"+TestLock.sourceB);
                try
                {
                    //停顿5秒获取另一个资源
                    Thread.sleep(5000);
                }
                catch (InterruptedException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(this.getName()+":尝试获取资源A...");
                synchronized (TestLock.sourceA)
                {
                    System.out.println(this.getName()+":"+TestLock.sourceA);                try
                    {
                        //停顿5秒进程结束
                        Thread.sleep(5000);
                    }
                    catch (InterruptedException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            System.out.println(this.getName()+":走到这里,说明没有发生锁,线程正常结束。");
        }
    }