黑马程序员技术交流社区

标题: 多线程售票中的问题 [打印本页]

作者: 冯瑞君老师    时间: 2011-12-18 11:30
标题: 多线程售票中的问题
定义了100张票要卖,我开了3个窗口,结果相当于卖了300张票,我看毕老师的视频说是定义成静态的就行了 ,我不明白为什么?求助详解!
作者: 宋双    时间: 2011-12-18 11:33
定义成静态就表示这部分数据被共享了,等于100张票被共享到3个窗口来卖了
作者: t_mac    时间: 2011-12-18 11:38
静态成员变量:   位于“数据区”,无论多少个对象该变量在内存中都只有一份,
如果你把它定义为static 也就是共享了你的100张票,三个窗口都来卖这100张,不会出现每个窗口都卖100张票 的情况
作者: 余松霖    时间: 2011-12-18 11:41
不定义成静态就相当于三个窗口每个窗口都有100张票。 静态之后这个100就是共享数据了。相当于三个窗口总共卖100张票。
作者: 刘健    时间: 2011-12-18 11:49
定义成静态表示这个变量可以被线程共享
作者: 应国炎    时间: 2011-12-18 21:36
如果定义成静态,则所有对象共享一个变量。  因为静态随着类的加载而加载,在定义对象之前就已经存在了,所以创建对象,不会再重复创建这个变量,直接使用了,且使用的都是同一个
作者: 曾运    时间: 2011-12-18 22:26
用static修饰该变量后, 该变量为全局共享变量,意思是3个售票窗口共享100张的票,当A窗口卖了一张后,B窗口出售的时候得到的票是99张的 而不是100张,如果不是static修饰该变量,那么每个窗口都出售100张票,总共的票数就是300了,而不是100.
作者: 黄达标    时间: 2011-12-19 00:31
定义成静态的,三个窗口共享这个静态数据,对象创建之前就已经随类加载。
比如,窗口1执行一次完毕,100变成99;然后切换到窗口2,窗口2就从99开始执行,而不是从100开始,不会重复之前的100了;以此类推。
作者: 刘基军    时间: 2011-12-19 09:53
1.Static关键字,修饰变量或方法后,即为静态变量或方法,是属于类的;
2.静态变量的初始化,是在加载main()方法之前进行的,所以当后面进行创建对象,所有的对象都是使用这一个变量(共享这个静态变量)。
  1. class Test
  2. {
  3.         static int i = 100;

  4.   public static void main(String[] args)
  5.   {
  6.           Test t1 = new Test();
  7.           t1.i--; //也可写成:Test.i--
  8.           System.out.println(t1.i);
  9.          
  10.           Test t2 = new Test();        
  11.     System.out.println(t2.i);

  12.     //测试结果:
  13.     //99
  14.     //99
  15.   }
  16. }
复制代码

作者: 刘博    时间: 2011-12-19 10:41
静态是说这数据被所有的共享,也就是说,不管你开几个窗口,都共享这100张票
作者: 杨强    时间: 2011-12-19 11:44
把变量定义成静态,所有类会共享这个静态变量,一个线程卖了一张 这个静态变量-1 这样就保证开多少线程卖的都是100张票
作者: 郝锡强    时间: 2011-12-19 12:24
非要这样可以通过接口完成
作者: 为梦而战    时间: 2011-12-19 15:14
Static 后,多个窗口相当于多个线程,共享100张票,其实用接口更好!




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