需求:多个窗口卖票。
老毕的课程中,他是这么写的- class Ticket extends Thread
- {
- private static int x = 100;
- public void run()
- {
- while(true)
- {
- if (x>0)
- {
- System.out.println(Thread.currentThread().getName()+"sale~~~"+x);
- x--;
- }
-
- }
- }
- }
- class TicketDemo
- {
- public static void main(String[] args)
- {
- Ticket t1 = new Ticket();
- Ticket t2 = new Ticket();
- Ticket t3 = new Ticket();
- Ticket t4 = new Ticket();
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
复制代码 视频里,他运行没问题,因为票会卖重复,所以给100张票加上静态了。
但是我一运行,
,其他的都正常,但是我卖出了103张票。 编号为100的4个线程各卖了一次。。。
这问题怎么解决?为啥运行起来会不同
PS:还有个问题,视频中是
- public void run()
- {
- while(true)
- {
- if (x>0)
- {
- System.out.println(Thread.currentThread().getName()+"sale~~~"+x);
- x--;
- }
-
- }
- }
复制代码 我不明白这个while和if为什么要这么用
直接- public void run()
- {
- while(x>0)
- {
-
- System.out.println(Thread.currentThread().getName()+"sale~~~"+x);
- x--;
- }
- }
复制代码 不行么?
|
|