第一步: 创建示例
package com.xz.test;
public class Xstatic {
public static int a;
private int b;
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
第二步:创建线程模仿,不同用户访问(到底算不算还请指教 我认为可以模仿)
package com.xz.test;
public class TestStaticThread {
public static void main(String[] args) throws InterruptedException {
Test2 t1 = new Test2();
Test2 t2 = new Test2();
t1.setName("线程1————");
t2.setName("线程2————");t1.start();
Thread.sleep(3000);//此处为了防止线程抢占资源导致打印顺序混乱
t2.start();
}
}
第三步:执行
package com.xz.test;
public class Test2 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
Xstatic x = new Xstatic();
System.out.println("线程:"+Thread.currentThread().getName());System.out.println(Xstatic.a);
System.out.println(x.getB());
ccc(x);
// System.out.println("-------");
// vvv(x);
}
public static void ccc(Xstatic x1){
Xstatic.a = 10;
x1.setB(20);
// System.out.println("static a :"+Xstatic.a);
// System.out.println(" b :"+x1.getB());
}
public static void vvv(Xstatic x1){
System.out.println("static a :"+Xstatic.a);
System.out.println("b :"+x1.getB());
}
}
执行以上代码 打印结果为
线程:线程1————
static修饰的变量:0
无static修饰的变量:0
线程:线程2————
static修饰的变量:10
无static修饰的变量:0
static 修饰的变量其实可以理解为类变量,当类被初始化时就也被初始化,并且不会被销毁,所以具有一定的数据持久化的作用,直到服务器重新启动。同时也可以看出,不同线程访问 static修饰的值会被记录,无static修饰的无法被记录。
比较片面的理解但是个人感觉便于接受、如有不恰当的还请指出、我好及时改正