我知道兩個(gè)場景,就是雙重檢查鎖和對(duì)多個(gè)對(duì)象同步像這樣synchronized(player) {synchronized(field) {// code}}據(jù)說這樣都是不安全的,需要考慮不安全構(gòu)造,但是我想想,如果一個(gè)對(duì)象還沒有構(gòu)造完成就把引用丟出來,那我豈不是時(shí)時(shí)刻刻都要小心,這樣用java不對(duì)吧
3 回答

浮云間
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
可是java可以重排對(duì)象引用的賦值和對(duì)象域的初始化?這對(duì)編寫正確的多線程程序太難了吧
1、私有化
2、無狀態(tài)
3、復(fù)制
你的這種情況如果是編寫應(yīng)用程序 很少會(huì)遇到的,還可以這樣 首先根據(jù)playey和field去獲取一把鎖,然后同步這把鎖,這樣實(shí)現(xiàn)起來要簡單的多
所以最好的做法是復(fù)制(如erlang、scala等的實(shí)現(xiàn)) 或者你去看下actor

炎炎設(shè)計(jì)
TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
這個(gè)你不用擔(dān)心,構(gòu)造函數(shù)的調(diào)用是線程安全的。只要你不在構(gòu)造函數(shù)里把this拋出就沒有問題。
添加回答
舉報(bào)
0/150
提交
取消