实现类:

package com.java.day19ThreadLock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/*使用步骤:
* 1.在成员变量位置创建一个ReentrantLock对象
* 2.在可能出现线程安全的代码前调用Lock接口中的方法lock获取锁
* 3.在可能出现线程安全的代码后调用Lock接口中的方法unlock锁
* */
public class ThreadLock implements Runnable{
// 票的数量
private int ticket = 100;
// 成员变量位置创建一个ReentrantLock对象
Lock l = new ReentrantLock();


@Override
public void run() {
while (true){
l.lock();
if (ticket > 0) {
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票");
ticket--;
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
l.unlock();
}

}else {
l.unlock();
break;
}

}

}
}

测试类:

package com.java.day19ThreadLock;

public class TestThreadLock {
    public static void main(String[] args) {
        ThreadLock lock = new ThreadLock();
        Thread t1 = new Thread(lock);
        Thread t2 = new Thread(lock);
        Thread t3 = new Thread(lock);
        t1.start();
        t2.start();
        t3.start();
    }
}