要想解决“脏数据”的问题,最简单的方法就是使用 synchronized 关键字来使 run 方法同步,
代码如下:
publicsynchronizedvoidrun()
{
}
从上面的代码可以看出,只要在 void 和 public 之间加上 synchronized 关键字,就可以使 run 方法同步,也就是说,对于同一个 Java 类的对象实例,run 方法同时只能被一个线程调用,并当前的 run 执行完后,才能被其他的线程调
用。即使当前线程执行到了 run 方法中的 yield 方法,也只是暂停了一下。由于其他线程无法执行 run 方法,因此,最终还是会由当前的线程来继续执行。先看看下面的代码:
sychronized 关键字只和一个对象实例绑定
classTest
{
publicsynchronizedvoidmethod()
{
}
}
publicclassSyncimplementsRunnable
{
privateTesttest;
publicvoidrun()
{
test.method();
}
publicSync(Testtest)
{
this.test=test;
}
publicstaticvoidmain(String[]args)throwsException
{
Testtest1=newTest();
Testtest2=newTest();
Syncsync1=newSync(test1);
Syncsync2=newSync(test2);
newThread(sync1).start();
newThread(sync2).start();
}
}