非阻塞同步

2021-07-25 20:45:32 字數 1164 閱讀 6254

非阻塞的棧

//利用atomicreference實現非阻塞棧

public

class concurrentstackwhile(!top.compareandset(oldhead,newhead));

}public e pop()while(!top.compateandset(oldhead,newhead));

return oldhead.item;

}class node

}}

非阻塞的鍊錶( concurrentlinkedqueue實現 )

/**

* 非阻塞鍊錶插入演算法

* 兩個指標,乙個指向頭,乙個指向尾

* 在插入操作時同時維護兩個同步操作:1.插入新的節點,2.更新尾節點

**/@threadsafe

public

class linkedqueue

}//啞節點

private nodedummy = new node(null,null);

private final atomicreference> head

= new atomicreference>(dummy);

private final atomicreference> tail

= new atomicreference>(dummy);

//put

public boolean put(e item)else}}

}}

}

在真正的concurrentlinkedqueue中,使用原子的域更新器來同步,這樣主要是為了省去新建atomicreference的建立過程

private

class node

}//第乙個引數是類的型別,第二個是引數的型別,第三個是引數的名稱

private atomicreferencefieldupdaternextupdater

= atomicreferencefieldupdater.newupdater(node.class,node.class,"next");

//ex.

public

static

void

main()

阻塞,非阻塞,非同步,同步

之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...