非阻塞的棧
//利用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.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...