加synchronized關(guān)鍵字之后,執(zhí)行結(jié)果還是不確定
package?jmm; /** ?*?Created?by?WangLong?on?2017-05-28. ?*/ public?class?SynchronizedDemo?{ ????//共享變量 ????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); ????} ????/** ?????*?內(nèi)部線程類 ?????*/ ????private?class?ReadWriteThread?extends?Thread{ ????????private?boolean?flag; ????????public?ReadWriteThread(boolean?flag){ ????????????this.flag=flag; ????????} ????????public?void?run(){ ????????????if(flag){ ????????????????write();????//構(gòu)造方法中傳入true,執(zhí)行寫操作 ????????????}else{ ????????????????read();?????//構(gòu)造方法中傳入false,執(zhí)行讀操作 ????????????} ????????} ????} ????public?static?void?main(String[]?args)?{ ????????SynchronizedDemo?demo=new?SynchronizedDemo(); ????????demo.new?ReadWriteThread(true).start();?????//啟動(dòng)線程執(zhí)行寫操作 ????????/*try?{ ????????????Thread.sleep(1000); ????????}?catch?(InterruptedException?e)?{ ????????????e.printStackTrace(); ????????}*/ ????????demo.new?ReadWriteThread(false).start();?????//啟動(dòng)線程執(zhí)行讀操作 ????} }
/**
????代碼如上:僅僅加入synchronized關(guān)鍵字之后,執(zhí)行結(jié)果還是不確定???
*/
2017-06-13
調(diào)用的時(shí)候用線程調(diào)用,否則和普通方法調(diào)用一樣
2017-05-29
應(yīng)該加上synchronized(this),而不是為方法加synchronized