多线程实现30个人抢五个座位

这是一家公司的面试题,我做完了后在这里分享一下,还有的公司是多人抢票,原理是一样,多线程实现抢占机制。

代码:

/**
 * 
 */
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();
	         }         
	    }
	}

效果:

多线程实现30个人抢五个座位

上一篇:1041 考试座位号 (15分)


下一篇:2021-07-08