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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package Thread.lianxi;
class tick extends Thread {
private static int ticket = 100;
@Override
public void run() {
  // TODO Auto-generated method stub
  while(true){
  if (ticket>0) {
   System.out.println(tick.currentThread().getName() + "买出::"+ticket--);
  }
  }
}
}
public class ThreadTicketDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  tick t1 = new tick();
  tick t2 = new tick();
  tick t3 = new tick();
  tick t4 = new tick();
  t1.start();
  t2.start();
  t3.start();
  t4.start();
  
}
}

4 个回复

倒序浏览
  1. package Thread.lianxi;
  2. class tick extends Thread {
  3. private static int ticket = 100;//static修饰成员变量,当类加载的时候,它就会被加载的共享数据区.   
  4.                                  //[color=Red]也就是说它是该类多个对象要共享的数据(也可以理解成多个对象指向同一个变量),当对象调用时,直接从共享数据区找到它拿过来用就行了.[/color]
  5. @Override                        //如果不定义成static 不同对象会有自己的ticket,  买票的时候会出现重复的情况(买到同一张票)
  6. public void run() {
  7.   // TODO Auto-generated method stub
  8.   while(true){
  9.   if (ticket>0) {
  10.    System.out.println(tick.currentThread().getName() + "买出::"+ticket--);
  11.   }
  12.   }
  13. }
  14. }
  15. public class ThreadTicketDemo {
  16. /**
  17.   * @param args
  18.   */
  19. public static void main(String[] args) {
  20.   // TODO Auto-generated method stub
  21.   tick t1 = new tick();
  22.   tick t2 = new tick();
  23.   tick t3 = new tick();
  24.   tick t4 = new tick();
  25.   t1.start();
  26.   t2.start();
  27.   t3.start();
  28.   t4.start();
  29.   
  30. }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
static表示为静态成员变量,所以该类的对象共享一份变量值,1个人每一张后,下一个人买的时候就是之前的票数减一后的结果,比如说:整个购买过程中80号票只有一份,且只卖给了一个人,卖给这个人后,最新的票就变成79号票了。
如果不加static,每个对象都有自己的票数,然后就自己买自己的,你的你的80号票,我也有我的80号票,会乱。
回复 使用道具 举报
两个比喻帮你搞定:
没有加static的票,只要一new,这个人面前就有100张票,如果再new,第二人面前又有一百张票。
而加static的票,第一次new,改变票的数量,第二次再new的时候,此时票的数量就是第二次改变后的值。

就像没加static的苹果有10个,每new一次,苹果都会再次初始为10个,
而你加了静态static,第一个人吃了1个,那么此时苹果的个数就剩9个了,第二人再去吃的话,只能从9开吃。

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 胡卿 于 2012-6-8 22:57 编辑

static静态
   当对象中出现共享数据时,该数据被静态所修饰。
   当成员变量被修饰后,会随着类的加载而加载,优先于对象的存在,被所有对象共享。
   所以,加了static, ticket 就会被被所有人共享,所有人只有固定的票数,会随着人的购买而不断发生变化,也就是票数逐渐减少
    而没加static,成员对象ticket,就不会随着类的加载而加载,每个对象对应不同的ticket,都有相同的票数,别人的购买不会影响自己的票数。

所以楼主没有static,就会出现重复购买现象


注:判断是否定义static,在于数据是否被对象所共享。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马