比如:在类中这样声明:private static Thread trd;和private Thread trd;当然我知道变量是静态的,所以每次父类new的时候这个变量都是一个静态的值。
但是这样对线程运行,GC回收什么的有区别么?请大家分析以上这样的区别都有哪些?越详细越好。

解决方案 »

  1.   

    主要 的区别就是:private static Thread trd;这个东西在系统运行加载类的时候变量就会被赋值。
      

  2.   


    没区别不对吧?
    private Thread trd;
    这是一个类中的私有变量,所以,至少每次这个类创建新的实例时,该变量都被初始化
    为null,这样用这个变量调用时都会创建一个新的线程。private static Thread trd;
    这个是静态变量,当父类每次创建实例时,该变量只被初始化一次,因此不会开启多个线程。这个起码的区别还是有的。
      

  3.   

    静态变量数属于“类”的 而实例变量是属于“对象的” 每个实例对象new的时候都有一个指针指向他的type类 也就是这个类的元数据 你的静态变量也就放在那里 不受GC管的
    我不知道这么理解是否正确 静态变量其实是元数据的一部分 而实例变量是数据 元数据自然就不受GC管
      

  4.   

    前者基本上是这个类的所有实例的某个方法,都可以交给这个static的线程来执行吧后者基本上是一个实例的一个方法,只能叫给自己实例的一个线程这个还是看设计的问题需要把,如果所有该类的所有实例都需要用一个单一的线程来执行,那选static
    否则可以选非static得
      

  5.   

    但是这样对线程运行,GC回收什么的有区别么?我回答这个,
    静态引用变量可以作为GC的根,会长期贮存随代机制存留而不回收,只有当该应用程序退出才会被系统GC,所以一般而言列表或集合尽量不要使用静态全局却不断添加元素很容易内存耗用膨胀因GC无法施展