永发信息网

java中,用static 变量,实现卖火车票,假如有三个窗口,每个窗口都在卖一辆火车的票, 买的票不能重复!

答案:2  悬赏:50  手机版
解决时间 2021-11-09 08:32
  • 提问者网友:伴风望海
  • 2021-11-09 03:01
java中,用static 变量,实现卖火车票,假如有三个窗口,每个窗口都在卖一辆火车的票, 买的票不能重复!
最佳答案
  • 五星知识达人网友:举杯邀酒敬孤独
  • 2021-11-09 03:45
public class SaleTicket extends Thread{

static int mark=0;
static int ticket[]=new int [100];
int SaleTicketNo;
SaleTicket(int num){
SaleTicketNo=num;
}

public void run() {
// compute primes larger than minPrime
for(int i=0;i<100;i++)
{
if(ticket[i]==0){
ticket[i]=1;
mark=mark+1;
System.out.println("售票机编号:"+SaleTicketNo+" 票号:"+i+" 张次:"+mark);
}
}
}

}

public class Test {

public static void main(String[] args) {

SaleTicket sale1=new SaleTicket(101);
SaleTicket sale2=new SaleTicket(102);
SaleTicket sale3=new SaleTicket(103);
SaleTicket sale4=new SaleTicket(104);
SaleTicket sale5=new SaleTicket(105);

sale1.start();
sale2.start();
sale3.start();
sale4.start();
sale5.start();

}

}
不考虑死锁问题
全部回答
  • 1楼网友:第四晚心情
  • 2021-11-09 04:18
yiedld这个方法是让当前线程回到可执行状态,以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。
让线程暂时停止可以选择sleep方法。比如Thread.sleep(1000),当前线程睡眠1秒。需要知道的是,1秒后,线程是回到可执行状态,并不是执行状态,什么时候执行那是由虚拟机来决定的。所以sleep(1000)并不是在睡眠1秒后立即执行。

所以么,建议把yield方法改成sleep。

另外,建议把temp放在类外定义。不然的话,会有t1.temp,t2.temp和t3.temp三个量存在,不是同一个量,不行。追问1
2
2
4
5
每次运行结果不一样,最主要是它有些数重复了,
我想始终输出的结果是 1~5 中的不重复结果,而且每个数只输出一遍!追答static private int temp=1;
public class SaleTicket extends Thread{
。。。

把temp 放到类外定义,不然是三个temp,每个都从1到5,自然要打印3遍每个数
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯