Java实现三人同时卖票线程问题

Java实现卖票问题,三人同时卖票,但是不能卖同一张票。
Java实现三人同时卖票线程问题
代码如下:

/**
 * 
 */
package com.jasmyn.demo;

/**
 * @author jasmyn
 * @date 2020年11月24日上午8:16:13
 * @package com.jasmyn.demo
 */
public class Ticket implements Runnable {
	int number=100;
	private Object mutex=new Object();
	private int x=0;

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true) {
			if(x%2==0) {
				synchronized (mutex) {
					try {
						Thread.sleep(1000);//暂停一秒
					}catch(InterruptedException e) {
						e.printStackTrace();
					}	 
					if(number>0) {
						System.out.println(Thread.currentThread().getName()+"正在销售第"+(number--)+"张票");
					}													
				}
			}else {
				this.cell();
			}
			x++;
			if(number<0) {
				break;
			}
		}
				
	}
	
	public synchronized void cell() {//同步方法
		try {
			Thread.sleep(200);//暂停一秒
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
		if(number>0) {
			System.out.println(Thread.currentThread().getName()+"正在销售第"+(number--)+"张票");
		}
	}
}

测试代码:

/**
 * 
 */
package com.jasmyn.demo;

/**
 * @author jasmyn
 * @date 2020年11月24日上午8:15:34
 * @package com.jasmyn.demo
 */
public class TicketTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ticket ticket=new Ticket();
		Thread t1=new Thread(ticket,"za");
		Thread t2=new Thread(ticket,"zs");
		Thread t3=new Thread(ticket,"zd");
		t1.start();
		t2.start();
		t3.start();
	}

}

上一篇:【题解】FBI序列


下一篇:RMS Server打开或关闭日志记录