public?class?SynchronizedDemo2?{
private?boolean?ready?=?false;
private?int?result?=?0;
private?int?number?=?1;
public?synchronized?void?write()?{
ready?=?true;
number?=?2;
}
public?synchronized?void?read()?{
if?(ready)?{
result?=?number?*?3;
}
System.out.println("result="?+?result);
}
private?class?ReadWriteThread?extends?Thread?{
private?boolean?flag;
public?ReadWriteThread(boolean?flag)?{
this.flag?=?flag;
}
@Override
public?void?run()?{
if?(flag)?{
write();
}?else?{
read();
}
}
}
public?static?void?main(String[]?args)?{
for?(int?i?=?0;?i?<?5000;?i++)?{
SynchronizedDemo2?demo?=?new?SynchronizedDemo2();
demo.new?ReadWriteThread(true).start();
demo.new?ReadWriteThread(false).start();
}
}
}
2015-04-05
?出現(xiàn)0是因為讀線程先得到了執(zhí)行,讀線程執(zhí)行完,寫線程才執(zhí)行,這個我里面也有講到,你稍微注意下,在“synchronized實現(xiàn)可見性(下)”的第03:30之后!另外,慕課網(wǎng)這點估計剪切的估計太快了,有點不太容易注意到,可以在寫線程和讀線程之間加個休眠操作,讓寫線程執(zhí)行完,讀線程在執(zhí)行,也可以使用wait和notify來控制線程執(zhí)行的順序!
2016-09-25
synchronized加入后依然出現(xiàn)0,6的情況是正常的,我覺得假如synchronized是為了防止出現(xiàn)結(jié)果登錄3的情況,這里老師沒有講,我也不確定我說的是否是正確的。
2015-04-05
你的內(nèi)部鎖不是一個了