Lock锁

Java5开始,可以使用Java.util.concurrent.locks.Lock 接口
显示定义同步锁对象,实现同步机制,主要实现类是ReentrantLock类。
可使用ReentrantLock类显示加锁和释放锁。达到synchronized的效果。

Lock实现提供比使用synchronized方法和语句可以获得更广泛,更灵活的锁定操作
如:lock.lock(); lock.unlock();

import java.util.concurrent.locks.ReentrantLock;

public class SellTicket implements Runnable {

int ticket=100;

//创建锁对象(使用Lock对象)
ReentrantLock lock=new ReentrantLock();

@Override
public void run() {
    while (true){
        lock.lock();        //获取资源并且加锁
        if (ticket>0){
            
System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket+"张票");
            ticket--;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                //不管怎样,都会执行
                lock.unlock();
            }
        }else {
            //如果是最后一张票,那么让该线程释放锁
            lock.unlock();
            break;
        }
    }
}
}