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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李平 初级黑马   /  2012-4-18 22:19  /  1492 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  ThreadDemo2
{
public static void main(String[] args)
{
  Ticked t1 = new Ticked();
  Ticked t2 = new Ticked();
  Ticked t3 = new Ticked();
  Ticked t4 = new Ticked();
  t1.start();
  t2.start();
  t3.start();
  t4.start();
}
}
class Ticked extends Thread
{
private static int tick=100;//为什么加静态???
public void run()
{
  while(true)
  {
   if(tick>0)
      System.out.println(Thread.currentThread().getName()+"sale..."+tick--);
   else
    break;
  }
}
}

这个地方加静态是不是因为:4个线程需要调用的票数总共为100,所以不管谁用,用一个就少一个,这是一个数据。存放于共享区中。
所以以后共用的数据是不是都要加上静态?

3 个回复

正序浏览
如果不加静态,就会产生四个对象,当然就不对啦。所以必须要加静态的。
回复 使用道具 举报
Java类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,有些时候可以认为是全局变量。因此在某些时候为了节省系统内存开销、共享资源,可以将类中的一些变量声明为静态变量,通过下面的例子
Java代码
  public class WeekA{
      static class Data {
      private int week;
      private String name;
     Data(int i, String s) {
    week= i;
    name = s;
    }
   }
    Data weeks[] = {
     new Data(1, "Monday"), new Data(2, "Tuesay"), new Data(3, "Wednesday"), new Data(4, "Thursday"), new Data(5, "Friday"), new Data(6, "Saturday"), new                  Data(7, "Sunday")
                     
  };
  public static void main(String args[]) {
      final int N = 10000;
      WeekA weekinstance;
      for (int i = 1; i <= N; i++){
      weekinstance = new WeekA ();
      }
  }
 }
回复 使用道具 举报
嗯,对头,需要共享就静态~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马