日期:2014-05-20 浏览次数:21113 次
import java.util.concurrent.TimeUnit;  
import java.util.concurrent.locks.Lock;  
import java.util.concurrent.locks.ReentrantLock; 
import java.util.concurrent.locks.Condition; 
class B
{
        Lock lock=new ReentrantLock();
        Condition con=lock.newCondition();
        void f()
        {
                lock.lock();
                System.out.print(Thread.currentThread().getName());
                System.out.println(">>I'm running");
                try { con.await(); }
                catch(InterruptedException ex)
                {
                        System.out.print(Thread.currentThread().getName());
                        System.out.println(">>I'm interrupted!");
                }
                System.out.print(Thread.currentThread().getName()); 
                System.out.println(">>exit!");
        }
}
class A extends Thread
{
        B b;
        A(B b){this.b=b;}
        public void run()
        {
               b.f();
        }
}
public class Test 
{  
    public static void main(String[] args)
    {
            B b=new B();  
            A a=new A(b);
            a.start();
            A aa=new A(b);
            aa.start();
            try{Thread.sleep(1000);}
            catch(InterruptedException ex){/*Deal with it!*/}
            a.interrupt();
            aa.interrupt();
    }  
}  
 
        void f()
        {
                lock.lock();
                System.out.print(Thread.currentThread().getName());
                System.out.println(">>I'm running");
                try {con.await(); }
                catch(InterruptedException ex)
                {
                        System.out.print(Thread.currentThread().getName());
                        System.out.println(">>I'm interrupted!");
                }
        finally
        {
            lock.unlock();        //释放锁.
        }
        }