这是一家公司的面试题,我做完了后在这里分享一下,还有的公司是多人抢票,原理是一样,多线程实现抢占机制。
代码:
/**
*
*/
package com.test.seat;
import java.util.concurrent.locks.ReentrantLock;
/**
*
* <p>
* Description:
* </p>
*
* @author xuyangwei
*
* @date 2020年4月19日
*
*/
public class Seat extends Thread {
int count = 5; // 还剩多少张座位
ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (count>0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.lock();
sale();
lock.unlock();
}
}
public void sale(){
if (count>0){
System.out.println(Thread.currentThread().getName()+"抢到第"+count+"个座位");
count--;
}
}
/**
* @param args
*/
public static void main(String[] args) {
Seat seat=new Seat();
Thread[] t= new Thread[30];
for (int i = 0; i < 30; i++) {
t[i]= new Thread(seat,"同学"+i);
t[i].start();
}
}
}