(十一)并發(fā)集合——并發(fā)隊(duì)列-創(chuàng)新互聯(lián)

并發(fā)隊(duì)列 ConcurrentLinkedQueue

無(wú)界的并發(fā)隊(duì)列,內(nèi)部用單向鏈表實(shí)現(xiàn)。核心源碼如下

創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為石樓等服務(wù)建站,石樓等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為石樓企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
//節(jié)點(diǎn)
private static class Node{
	volatile E item;
	volatile Nodenext;

	//創(chuàng)建node時(shí)不會(huì)有并發(fā)問(wèn)題,直接寫入元素
	Node(E item) {
		UNSAFE.putObject(this, itemOffset, item);
	}
	......
}
//隊(duì)頭指針
private transient volatile Nodehead;
//隊(duì)尾指針
private transient volatile Nodetail;
public ConcurrentLinkedQueue() {
	//初始頭和尾都指向空節(jié)點(diǎn)
	head = tail = new Node(null);
}
//入隊(duì)
public boolean offer(E e) {
	//空指針檢查
	checkNotNull(e);
	final NodenewNode = new Node(e);

	for (Nodet = tail, p = t;;) {
		//q指向p的后繼
		Nodeq = p.next;
		if (q == null) {//p是最后一個(gè)節(jié)點(diǎn)
			if (p.casNext(null, newNode)) {//CAS操作,將newNode入隊(duì),直到成功為止
				if (p != t) //進(jìn)入這個(gè)if分支說(shuō)明 第一次循環(huán)p不是tail節(jié)點(diǎn),走了外層else分支向后移動(dòng)(其他線程入隊(duì));
					//CAS操作,將tail指向newNode,失敗了也沒(méi)關(guān)系,等下一個(gè)入隊(duì)線程更新。
					casTail(t, newNode);  
				return true;
			}
			// CAS失敗了會(huì)由其他線程重新讀取
		}
		else if (p == q)
			//到達(dá)隊(duì)尾
			p = (t != (t = tail)) ? t : head;
		else
			//p不是最后一個(gè)節(jié)點(diǎn),p移到下個(gè)位置
			p = (p != t && t != (t = tail)) ? t : q;
	}
}
//出隊(duì)
public E poll() {
	restartFromHead:
	for (;;) {
		for (Nodeh = head, p = h, q;;) {
			E item = p.item;
			//CAS操作,將p的item成功置為null,就算出隊(duì)
			if (item != null && p.casItem(item, null)) {
				if (p != h) // 進(jìn)入這個(gè)if分支說(shuō)明 第一次循環(huán)p不是head節(jié)點(diǎn),走了外層else分支向后移動(dòng)(其他線程出隊(duì));
					//CAS操作,如果p的后繼不為空則head置為p的后繼,否則置為p,失敗也沒(méi)關(guān)系,等下一個(gè)出隊(duì)線程更新
					updateHead(h, ((q = p.next) != null) ? q : p);
				return item;
			}
			else if ((q = p.next) == null) {//如果隊(duì)列中為空
				updateHead(h, p);
				return null;
			}
			else if (p == q)
				continue restartFromHead;
			else
				p = q;
		}
	}
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文題目:(十一)并發(fā)集合——并發(fā)隊(duì)列-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article10/cdjcgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站排名、電子商務(wù)、服務(wù)器托管ChatGPT、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化