实现类:
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(); } }