资源类
synchronized, Lock, ReentrantLock 属于可重入锁
class LTicket {
// 票数量
private int num = 30;
// 创建可重入锁
// 不传参数或者 false 是非公平锁, true是公平锁
// 公平锁:阳光普照,效率相对低
// 非公平锁:线程饿死,效率高
private final ReentrantLock lock = new ReentrantLock();
// 操作方法,卖票
public void sale() {
// 上锁
lock.lock();
try {
//判断是否有票
if (num > 0) {
System.out.println(Thread.currentThread().getName() + ":卖出:" + num-- + " 剩下:" + num);
}
} finally {
// 解锁
lock.unlock();
}
}
}
public class LSaleTicket {
public static void main(String[] args) {
LTicket lTicket = new LTicket();
new Thread(()->{
for (int i=0; i<40; i++){
lTicket.sale();
}
}, "aa").start();
new Thread(()->{
for (int i=0; i<40; i++){
lTicket.sale();
}
}, "bb").start();
new Thread(()->{
for (int i=0; i<40; i++){
lTicket.sale();
}
}, "cc").start();
}
}