要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下:
public synchronized voidrun()
{
...
}
从上面的代码可以看出,只要在void和public之间加上synchronized关键字,就可以使run方法同步,也就是说,对于同一个Java类的对象实例,run方法同时只能被一个线程调用,并当前的run执行完后,才能被其他的线程调用。即使当前线程执行到了run方法中的yield方法,也只是暂停了一下。由于其他线程无法执行run方法,因此,最终还是会由当前的线程来继续执行。先看看下面的代码:
sychronized关键字只和一个对象实例绑定
packagecom.fly.data;classTest {public static int n =0;public synchronized voidmethod() {//...
n++;
System.out.println(Thread.currentThread().getName()+"==:"+n);
}
}public class Sync implementsRunnable {privateTest test;publicSync(Test test)
{this.test =test;
}
@Overridepublic voidrun()
{
test.method();
}public static void main(String[] a