A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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();
        }
}

6 个回复

倒序浏览
就是这句代码:[color=Red]  前边这个是网站的加字体颜色的代码,不知道怎么没设置出来!private  int tick = 100;  
回复 使用道具 举报
就是这句:[color = Red] 这个是发帖时字体颜色的代码,不知道怎么没设置出来!private  int tick = 100;  
回复 使用道具 举报
不是吧,常量怎么用static修饰,还是我没看懂意思?还有目前代码的意思就是各个线程各运行一百次,因为是创建了四个线程,所以要想共享的话要实现Runnable
回复 使用道具 举报
用static静态修饰tick
回复 使用道具 举报
本帖最后由 Darkhorse′Xa 于 2014-7-20 21:07 编辑

可以实现Runnable接口,来做
回复 使用道具 举报
总共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();*/

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马