黑马程序员技术交流社区

标题: 菜鸟求助!!!毕老师多线程中讲到的售票窗口问题! [打印本页]

作者: yuli2039    时间: 2014-7-19 20:50
标题: 菜鸟求助!!!毕老师多线程中讲到的售票窗口问题!
本帖最后由 yuli2039 于 2014-7-19 20:58 编辑

本人菜鸟,正在学习基础中,如下代码,如果标注的部分加 static修饰后(总共100张票),后边创建的四个线程访问的就是同一个100张票,而不是各100张票???不知道大家理解我表达的意思没有,请各位前辈帮忙!
class Ticket extends Thread
{
        private  int tick = 100;  
        public void run()
        {
                while(true)
                {
                        if(tick>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
                        }
                }
        }
}

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();
        }
}

作者: yuli2039    时间: 2014-7-19 20:52
就是这句代码:[color=Red]  前边这个是网站的加字体颜色的代码,不知道怎么没设置出来!private  int tick = 100;  
作者: yuli2039    时间: 2014-7-19 20:54
就是这句:[color = Red] 这个是发帖时字体颜色的代码,不知道怎么没设置出来!private  int tick = 100;  
作者: 月影箫风起k    时间: 2014-7-20 20:17
不是吧,常量怎么用static修饰,还是我没看懂意思?还有目前代码的意思就是各个线程各运行一百次,因为是创建了四个线程,所以要想共享的话要实现Runnable
作者: 佛山java爱好者    时间: 2014-7-20 20:54
用static静态修饰tick
作者: Darkhorse′Xa    时间: 2014-7-20 20:57
本帖最后由 Darkhorse′Xa 于 2014-7-20 21:07 编辑

可以实现Runnable接口,来做

作者: java—family    时间: 2014-7-20 21:06
总共100张票 ,4个窗口都要买票, 这要涉及线程  需要加锁  
100是共享数据,我们在买票,(做减法)的时候需要加锁。
class Ticket implements Runnable//extends Thread
{
   private int num = 100;
  Object obj = new Object();
  public void run()

                while(true)
{
               synchronized(obj)
                          {
                        if(num>0)
                                        {
                                             try{Thread.sleep(10);}catch (InterruptedException e){}
                                       System.out.println(Thread.currentThread().getName()+".....sale...."+num--);
                                         }
                         }
}
}
}
class TicketDemo
                {
                    public static void main(String[] args)
                               {
                                      Ticket t = new Ticket();//创建一个线程任务对象。
                                      Thread t1 = new Thread(t);
                                      Thread t2 = new Thread(t);
                                     Thread t3 = new Thread(t);
                                     Thread t4 = new Thread(t);
                                           t1.start();
                                           t2.start();
                                           t3.start();
                                           t4.start();
/*
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3start();
t4.start();*/






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2