`

concurrent- ConcurrentLinkedQueue

 
阅读更多

ConcurrentLinkedQueue使用了Unsafe的cas机制保证了线程的安全,用peek方法为例

 

public class ConcurrentLinkedQueue<E> extends AbstractQueue<E>
        implements Queue<E>, java.io.Serializable {
		private static final sun.misc.Unsafe UNSAFE;
	    private transient volatile Node<E> head;
		private transient volatile Node<E> tail;
		
	    private boolean casHead(Node<E> cmp, Node<E> val) {
			return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
		}
	
		//以peek为例,
		public E peek() {
			restartFromHead:
			for (;;) {
				for (Node<E> h = head, p = h, q;;) {
					E item = p.item;
					//当找到值,或者到最后一个节点的时候
					if (item != null || (q = p.next) == null) {
					    //判断head是不是和原来的一样,如果一样将P设置为head
						updateHead(h, p);
						return item;
					}
					else if (p == q)
						continue restartFromHead;
					else
						p = q;
				}
			}
		}
		
	    /**
		 * Try to CAS head to p. If successful, repoint old head to itself
		 * as sentinel for succ(), below.
		 */
		final void updateHead(Node<E> h, Node<E> p) {
			if (h != p && casHead(h, p))			    
				h.lazySetNext(h);
		}
}
分享到:
评论

相关推荐

    concurrent-1.3.4.jar

    并发控制:concurrent包提供了一些线程安全的集合类,如ConcurrentHashMap、ConcurrentLinkedQueue等,可以在多线程环境下安全地对集合进行操作,而无需手动添加同步机制。 原子操作:concurrent包提供了一些原子...

    实战Concurrent-BlockQueue

    《实战Concurrent-BlockQueue》 在Java并发编程领域,`Concurrent-BlockQueue`是一个重要的数据结构,它结合了线程安全与高效性能。本文将深入探讨`ConcurrentLinkedQueue`、`ArrayBlockingQueue`以及`...

    Android-Java并发工具类库

    3. **并发集合**:`ConcurrentHashMap`、`ConcurrentLinkedQueue`等并发集合类提供了线程安全的数据结构,可以在多线程环境下高效地进行读写操作,无需显式的同步。 4. **原子变量**:`AtomicInteger`、`AtomicLong...

    Concurrent-MultiThread-Async:多线程的使用,concurrent包的使用,并发队列的时候,@ Async方法返回值的异步处理,

    并发队列是`concurrent`包中的重要组件,如`ConcurrentLinkedQueue`、`LinkedBlockingQueue`等。它们在多线程环境中提供高效的队列操作,如添加、移除元素,且保证线程安全。队列在并发编程中常用于任务调度和数据...

    java.util.concurrent

    java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和...

    java-concurrent-ways:演示几种用Java实现并发的方法

    7. **并发集合**:Java提供了一些线程安全的集合,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `ConcurrentLinkedQueue`等,它们在多线程环境下性能优越。 8. **并发工具类**:`java.util.concurrent`包中包含...

    ConcurrentLinkedQueue源码分析.rar

    首先,我们要明白`ConcurrentLinkedQueue`是Java并发包`java.util.concurrent`中的一个类,它实现了`Queue`接口,并且遵循FIFO(先进先出)原则。与传统的同步队列如`ArrayBlockingQueue`不同,`...

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    `ConcurrentLinkedQueue` 是 Java 并发包 `java.util.concurrent` 提供的一个高性能的线程安全队列实现,基于链表结构,它适用于对吞吐量有较高要求的场景。`ConcurrentLinkedQueue` 不提供容量限制,并且在队列为空...

    java并发工具包 java.util.concurrent中文版-带书签版

    3. **并发集合**:Java并发工具包提供了一系列线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`。这些集合类在多线程环境下可以避免同步锁的开销,提高性能。 4. **原子...

    自己动手让springboot异步处理浏览器发送的请求(只需要使用ConcurrentLinkedQueue即可)

    首先,`ConcurrentLinkedQueue`是Java并发包`java.util.concurrent`中的一个无界线程安全队列,基于链接节点实现,具有很好的性能。它的插入和删除操作都是O(1)的时间复杂度,非常适合用于高并发场景下的任务队列。...

    java并发工具包 java.util.concurrent中文版pdf

    其中包括但不限于线程池(`ExecutorService`)、阻塞队列(`BlockingQueue`)、原子变量类(`AtomicInteger`, `AtomicLong` 等)、并发容器(`ConcurrentHashMap`, `ConcurrentLinkedQueue` 等)以及未来/延迟结果...

    聊聊并发(6)ConcurrentLinkedQueue的

    首先,`ConcurrentLinkedQueue`基于Java的`java.util.concurrent`包,它是Java并发库的一部分,设计目标是提供高效的并发性能。它采用了非阻塞算法,基于“链接节点”的数据结构,而非传统的数组或链表,这使得其在...

    concurrent:并行处理 Java 示例

    在并发集合方面,Java提供了线程安全的容器,如`ConcurrentHashMap`(并发哈希表)、`CopyOnWriteArrayList`(写时复制的列表)和`ConcurrentLinkedQueue`(无界并发队列)。这些集合类内部实现了高效的同步机制,...

    面试-Java一些常见面试题+题解之多线程开发-JavaConcurrent.zip

    - ConcurrentHashMap、ConcurrentLinkedQueue等容器是线程安全的,它们在并发环境下提供高效且线程安全的操作。 - 使用Collections.synchronizedXXX()方法将非线程安全的容器转换为线程安全的容器,但性能可能较低...

    java5 并发包 (concurrent)思维导图

    - `ConcurrentLinkedQueue`:无界并发队列,基于链接节点的无锁算法实现。 - `LinkedBlockingQueue`:基于链接节点的阻塞队列,适用于生产者-消费者模型。 - `CopyOnWriteArrayList`和`CopyOnWriteArraySet`:...

    java.util.concurrent 测试源文件

    4. **并发集合**:JUC提供了线程安全的集合,如ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等,它们在多线程环境下能保证数据一致性,而无需显式同步。 5. **原子类**:Atomic包下的类,如...

    java.util.concurrent介绍(重要).pdf

    - `ConcurrentLinkedQueue`:无界并发队列,基于链接节点实现,性能高。 3. **同步工具类**: - `CountDownLatch`:允许一个或多个线程等待其他线程完成操作。 - `CyclicBarrier`:允许多个线程在到达一个屏障点...

    java高并发源码-java-concurrent:Java高并发,JUC,相关源码。1、马士兵高并发视频源码(听课时练习)

    7. Concurrent Collections:如ConcurrentHashMap、ConcurrentLinkedQueue等,是一系列线程安全的数据结构,能够在高并发下提供高效性能。 8. CountDownLatch、CyclicBarrier和Semaphore:这些是同步辅助类,用于...

    Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学院整理

    ConcurrentLinkedQueue是Java并发包`java.util.concurrent`下的一个类,它实现了`Queue`接口,并且是一个完全由原子操作构建的无锁队列。队列遵循FIFO(先进先出)原则,这意味着元素会按照它们被插入的顺序被取出。...

    Java的concurrent包动画演示

    6. **并发集合**:`concurrent`包提供了一系列线程安全的集合,如`ConcurrentHashMap`、`CopyOnWriteArrayList`、`ConcurrentLinkedQueue`等。这些集合在多线程环境下可以实现高效的并发操作,无需额外的同步措施。 ...

Global site tag (gtag.js) - Google Analytics