public class TestThread { static int aa = 0; public static void main(String[] args) { Threadd a = new TestThread().new Threadd();
Threadd b = new TestThread().new Threadd();
Threadd c = new TestThread().new Threadd();
a.start();
b.start();
c.start(); } class Threadd extends Thread { @Override
public void run() {
printt();
}
} // 为什么这个地方不能锁定呢?
synchronized void printt() {
this.aa = (this.aa + 1);
System.out.println(this.aa);
}}
为什么这么做就不可以得到1 2 3的输出呢 ?
aa是静态变量,要输出1 2 3可以讲print声明为static或者用synchronized(TestThread.class)来达到同步修改静态变量的目的。还有为啥不要静态内部类,让代码看上去简洁一些。
比如:public class TestThread { static int aa = 0; public static void main(String[] args) {
Threadd a = new TestThread().new Threadd();
Threadd b = new TestThread().new Threadd();
Threadd c = new TestThread().new Threadd();
a.start();
b.start();
c.start();
} class Threadd extends Thread {
@Override
public void run() {
printt();
}
} // 为什么这个地方不能锁定呢?
static synchronized void printt() {
//synchronized (TestThread.class) {
aa = (aa + 1);
System.out.println(aa);
//}
}
}