多线程执行,为什么明明已经加了synchronized了,还是出现每次结果都不一样呢?
publicclassTest{privateinta=0;publicstaticvoidmain(String[]args){Testtest=newTest();f...
public class Test {
private int a = 0;
public static void main(String[] args) {
Test test = new Test();
for (int i = 0; i <= 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
test.setA(test.getA() + 1);
}
}).start();
}
System.out.println(test.getA());
}
public int getA() {
return a;
}
public synchronized void setA(int a) {
this.a = a;
}
}
如果我把synchronide 放到run方法里则执行正确? 为什么呢? 锁不是当前对象吗? 只有一个test对象啊? 展开
private int a = 0;
public static void main(String[] args) {
Test test = new Test();
for (int i = 0; i <= 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
test.setA(test.getA() + 1);
}
}).start();
}
System.out.println(test.getA());
}
public int getA() {
return a;
}
public synchronized void setA(int a) {
this.a = a;
}
}
如果我把synchronide 放到run方法里则执行正确? 为什么呢? 锁不是当前对象吗? 只有一个test对象啊? 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询