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、运行效果