package com.company;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//Lock锁,可以自己设置公平锁还是非公平锁(默认是公平的)
public class LockTest {
public static void main(String[] args) {
Ticket2 ticket2 = new Ticket2();
new Thread(()->{
for (int i = 0; i < 30; i++) {
ticket2.sale();
}
},"学生A").start();
new Thread(()->{
for (int i = 0; i < 30; i++) {
ticket2.sale();
}
},"学生B").start();
new Thread(()->{
for (int i = 0; i < 30; i++) {
ticket2.sale();
}
},"学生C").start();
}
}
class Ticket2{
private int number = 30;
//可重入锁
Lock lock = new ReentrantLock();
public void sale(){
//加锁
lock.lock();
try{
if(number > 0) {
System.out.println(Thread.currentThread().getName()
+ "买到了第" + (number--) + "票,剩余:" + number
);
}
}catch (Exception e){
e.printStackTrace();
}finally {
//解锁
lock.unlock();
}
}
}
运行结果:
详细信息请看狂神视频