1. 程式人生 > >Java 死鎖

Java 死鎖

ron func run blog pub read 同步 lock println

/*
死鎖:常見情景之一:同步的嵌套。
*/

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 { public static final Object locka = new Object(); public static final Object lockb = new Object(); } class SynFunctionLockDemo { public static void main(String[] args) { Test a = new Test(true); Test b = new Test(false); Thread t1 = new Thread(a); Thread t2 = new Thread(b); t1.start(); t2.start(); } }
Output: Thread-0..if locka.... Thread-1..else lockb....

Java 死鎖