关于线程问题,请帮我看看呀。谢谢各位。
程序代码如下:
public class ARunnable implements Runnable {
int a;
public void run() {
for(a=0;a <10;a++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
System.out
.println(Thread.currentThread().getName() + " a= " + a);
}
}
public static void main(String[] args) {
ARunnable run=new ARunnable();
Thread thread1=new Thread(run);
Thread thread2=new Thread(run);
thread1.start();
thread2.start();
}
}
运行的结果为:
Thread-0 a=0
Thread-1 a=1
Thread-1 a=2
Thread-0 a=3
Thread-1 a=4
Thread-0 a=4
Thread-0 a=6
Thread-1 a=7
Thread-1 a=8
Thread-0 a=9
Thread-1 a=10
程序员结果怎么多了一行Thread-1 a=10呀,因为两个线程同时操作一个对象
但我在线程控制了循环为10次,但结果却多出一行呀。何解呀。
------解决方案--------------------Thread-0在执行i++的时候,i = 10,此时还没执行 i < 10的判断,此时
Thread-1执行print语句,此时i = 10,然后执行i++,再进行i <10的判断,结束循环
结果就成了那个样子了。
------解决方案--------------------所以要对a变量的修改和读取进行synchronized
------解决方案--------------------同步