老码请进,JAVA,关于买票。。。。
- crc8如图所示,假设我用两个线程卖票。调试过程中,因为我是菜鸟且是初学。我想知道是不是两个线程都有在卖票。。。如果我将票数设置的太小100或1000这样的,永远就只有一个线程在卖。。。我估计是我电脑运算太快的原因,所以我就只设置票数是10000或100万这样的。。。运行过程确实看到两个线程在闪卖啦。
但我想要的是:我票数是50或100或5的时候,如何也是多线程在卖呢?复制代码- class A extends Thread
- {
- public static int tickets = 50000;
- public static String str = new String("lock");
- public void run()
- {
- while (true)
- {
- synchronized (str)
- {
- if (tickets > 0)
- {
- System.out.printf("%s线程正在卖出第%d张票\n", Thread.currentThread().getName(),tickets);
- --tickets;
- }
- else
- {
- break;
- }
- }
- }
- }
- }
- public class TestTickets_3
- {
- public static void main(String[] args)
- {
- A aa1 = new A();
- aa1.start();
- A aa2 = new A();
- aa2.start();
- }
- }
- class A extends Thread
- wenxisyt建议你看下并行方面的知识、线程同步与通讯等
- antonychan它会一直2线程再卖啦。。。。为何你会认为只有一个线程在卖呢。。。
另外操作对象的时候需要锁一下,否则有可能多线程都处理了同一个数据(卖了同一张票) - crc8按逻辑应该是两个线程在卖,我只是想 我在调试的时候, 测试票数不想设置得太大。想设置到小点也可以看到多线程在卖。。这样方便调试啊。
- 唐浪加个延时?
- antonychan
- xx6412223我来正经回答一下,你代码没问题,中间要sleep一下,模拟卖票业务。
或者你用一个值为2的countdownlatch 在while循环后开启 - very20027501线程会把CPU分配的时间片跑完了才切换,除非你强制让他提前休息--调用sleep
- kevincai100在后面加个 sleep ,或者用公平锁
- crc8