2 qq 34579183 qq_34579183 于 2016.04.07 21:32 提问

小白求助:线程问题求大神给点思路

![图片说明

图片说明

我现在知道那个窗口卖的是多少号票

我想知道卖出一张票后,剩余的总票数

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.07 21:36

你的那个变量是剩余票呢?num的话不就是直接就是num吗?

qq_34579183
qq_34579183 我现在知道那个窗口卖的是多少号票。 我想知道卖出一张票后,剩余的总票数
一年多之前 回复
qq_34579183
qq_34579183   2016.04.07 21:46

图片说明

qq_25827845
qq_25827845   2016.04.07 22:39

售票案例演示[Thread05.java]

/**

  • 功能:使用线程的注意事项
  • 线程并发同步锁synchronized(Object){}的使用
    */
    public class Thread05 {
    public static void main(String[] args) {
    //定义一个售票窗口
    TicketWindow tw1=new TicketWindow();

    //使用三个线程同时启动
    Thread t1=new Thread(tw1);
    Thread t2=new Thread(tw1);
    Thread t3=new Thread(tw1);
    
    t1.start();
    t2.start();
    t3.start();
    

    }
    }

//售票窗口类
class TicketWindow implements Runnable {
//共有2000张票
private int nums=2000;
private Dog myDog=new Dog();

public void run() {
    while(true){
        //出票速度是1秒出一张
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //认为if else要保证其原子性
        //先判断是否还有票
        synchronized(myDog){
             if(nums>0){
                //显示售票信息
                //Thread.currentThread().getName()得到当前线程的名字
System.out.println(Thread.currentThread().getName()+"正在售出第"+nums+"张票");
                    nums--;
            }else{
                //售票结束
                 break;
             }
        }
     }
 }

}

class Dog{
}

qq_25827845
qq_25827845   2016.04.07 22:42

你那没加同步锁,没意义呀。卖票的各个线程直接具有不确定关系。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!