Java之多线程买票程序

2021-04-27 09:48:30 浏览数 (1)

                                                       Java之多线程买票程序

1、要求

要求五个线程,分别命名为售票窗口1、售票窗口 2.......售票窗口5,

一共100张票,每个售票窗口卖票的数量大致相同(20)张卖票时给与编号,每张票唯一。

每次出票时,输出时间、售票时间名字和票的编号正确。

每个售票窗口卖票大致相同。

使用让资源的方式完成每个售票窗口。

卖票时输出时间(格式为yyyy-MM-dd HH时mm分ss秒 S美好秒)、售票窗口名字和票编号

2、代码

代码语言:javascript复制
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 多线程的卖票程序
 * @author com
 *
 */
class Tread1 implements Runnable{
	int sum = 100;
	java.util.Date date;
	Timestamp stamp;
	SimpleDateFormat sdf;
	Tread1 t;
//	ReentrantLock lock = new ReentrantLock();//加锁
	public void ticket() {
		while(sum>0) {//for(int i=0;i<100;i  ){
			date = new java.util.Date();
			stamp = new Timestamp(date.getTime());
			sdf = new SimpleDateFormat("yyyy-MM-dd HH时mm分ss秒 S毫秒");
//			synchronized(this) {
				if(sum<=0) {
					return;	//break;
				}
				System.out.println(sdf.format(stamp) " " Thread.currentThread().getName() "  卖了:第" sum-- "张票");
				try {
					this.wait(10);
//					this.notify();
//					Thread.interrupted();
//					Thread.yield();
				} catch (Exception e) {
					e.printStackTrace();
				}
//			}
		}
	}
	@Override
	synchronized public void run() {
		ticket();
	}
}
public class Test04 {

	public static void main(String[] args) {
		Tread1 tread1 = new Tread1();
		Thread t1 = new Thread(tread1,"售票窗口一");
		Thread t2 = new Thread(tread1,"售票窗口二");
		Thread t3 = new Thread(tread1,"售票窗口三");
		Thread t4 = new Thread(tread1,"售票窗口四");
		Thread t5 = new Thread(tread1,"售票窗口五");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
//		Thread.yield();
//		try {
//			t1.join();
//			t2.join();
//			t3.join();
//			t4.join();
//			t5.join();
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		}
		
	}
}

4、运行效果

0 人点赞