有一个类Tempa
public class Tempa {
public static int num = 0;
public synchronized void add(){
num++;
}
public static int getNum(){
return num;
}
public static void main(String[] args) throws InterruptedException {
// TODO 自动生成的方法存根
Tempa a = new Tempa();
for(int i = 0;i<100;i++){
Thread.sleep(500);
a.add();
}
}
}
里面有静态数值和一个静态方法
但是在另一个类里却取不到Temp
public class Temp {
public static void main(String[] args){
System.out.println(Tempa.getNum());
}
}
一直输出就是0,没有得到想要的数值,请大神帮忙看一下呢。谢谢啊
你把add 里面的方法写错了,改为num+=1; num++,要使用才会加1;其他的没有问题。
因为它们是两个进程,并不属于同一个环境,所以才会是0吧。你放到一个应用环境就可以
你执行的是Temp类的main方法,它是不会去调用Tempa中的main方法的。
将
public static void main(String[] args) throws InterruptedException {
// TODO 自动生成的方法存根
Tempa a = new Tempa();
for(int i = 0;i<100;i++){
Thread.sleep(500);
a.add();
}
}
改成静态块:
static {
// TODO 自动生成的方法存根
Tempa a = new Tempa();
for(int i = 0;i<100;i++){
Thread.sleep(500);
a.add();
}
}
需要把你的getNum()方法的权限设置为private,因为权限是public时,外部的程序就会绕过synchronized void add()方法。
定义private 的instance变量+它的 get方法,而不要定义public/protected的instance变量。如果将变量定义为public,对象在外界可以
绕过同步方法的控制而直接取得它,并改动它。