import java.util.concurrent.*;
import java.util.concurrent.locks.*;

/** *//**
*    
*/

public class Test ...{
    private ReentrantLock lock = new ReentrantLock();

    public void untimed() ...{
        boolean captured = lock.tryLock();
        try ...{
            System.out.println("tryLock(): " + captured);
        } finally ...{
            if (captured)
                lock.unlock();
        }
    }

    public void timed() ...{
        boolean captured = false;
        try ...{
            captured = lock.tryLock(2, TimeUnit.SECONDS);
        } catch (InterruptedException e) ...{
            throw new RuntimeException(e);
        }
        try ...{
            System.out.println("tryLock(2, TimeUnit.SECONDS): " + captured);
        } finally ...{
            if (captured)
                lock.unlock();
        }
    }

    public static void main(String[] args) ...{
        final Test al = new Test();
        al.untimed(); // True -- lock is available
        al.timed(); // True -- lock is available
        // Now create a separate task to grab the lock:
        new Thread() ...{
            ...{
                setDaemon(true);
            }

            public void run() ...{
                al.lock.lock();
                System.out.println("acquired");
            }
        }.start();
        Thread.yield(); // Give the 2nd task a chance
        al.untimed(); // False -- lock grabbed by task
        al.timed(); // False -- lock grabbed by task
    }
}
解释:    
1 单独获得锁都没有问题    
2 如果有另一个线程在争夺锁时就得看谁先拿到了    
3 al.lock.lock(); 这个是锁的简单使用,是 al对象的 lock 属性,调用了它的lock()方法,拿到了锁    
4 此程序根据线程启动的速度和系统调度不同,每次运行结果很可能不同。 那个tryLock():由于先调用,且为立即拿到锁,成功的几率稍大一些    


以下几种输出都是正常的

tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
acquired
tryLock(): false
tryLock(2, TimeUnit.SECONDS): false

tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
acquired

tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
tryLock(): true
acquired
tryLock(2, TimeUnit.SECONDS): false