- 浏览: 78464 次
文章分类
最新评论
-
kevinflynn:
...
ThreadLocal 源码分析 -
kevinflynn:
[url=aaaa][/url]
ThreadLocal 源码分析 -
kevinflynn:
学习到了 感谢楼主。
ThreadLocal 源码分析
public interface BlockingQueue<E> extends Queue<E> {
/**
* 插入指定元素到队列中,如果没有超出容量限制的话, 插入成功,返回 true. 如果没有空间的话,抛出 IllegalStateException.
* 当使用有容量限制的队列(queue)时,通常最好是使用 offer(Object) 方法.
*
*/
boolean add(E e);
/**
* 插入指定元素到队列中,如果没有超出容量限制的话, 插入成功,返回 true, 如果没有空间的话返回 false.
* 当使用有容量限制的队列时,这个方法比 add 方法更好(当插入失败的时候,抛异常).
*
*/
boolean offer(E e);
/**
* 插入指定元素到队列中,必要时等待空间可用.
*
*/
void put(E e) throws InterruptedException;
/**
* 插入指定元素到队列中,必要时等待指定的时间等待元素可用.
*
*/
boolean offer(E e, long timeout, TimeUnit unit)
throws InterruptedException;
/**
* 检索并删除队列的头部,必要时等待直到元素可用.
*
*/
E take() throws InterruptedException;
/**
* 检索并移除队列的头部,必要时等待指定的时间等待元素可用.
*
*/
E poll(long timeout, TimeUnit unit)
throws InterruptedException;
/**
*
* 返回这个队列在理想状态下可以非阻塞接收的元素的个数。如果没有明确指定队列容量,那么就返回Integer.MAX_VALUE.
* 注意:无法总是判断尝试插入一个元素是否成功通过检查 remainingCapacity 方法. 因为可能存在这么一种情况,另外一个线程
* 即将插入或者移除一个元素.
*
*/
int remainingCapacity();
/**
*
* 从队列中删除指定元素的单个实例,如果它存在的话. 更正式的说,删除元素 e(o.equals(e)), 如果队列
* 中包含一个或者多个这样的元素. 如果此队列包含指定的元素,则返回 true(或者等效的说,如果此队列因调用
* 这个方法而发生了更改).
*
*/
boolean remove(Object o);
/**
* 如果此队列包含指定元素,则返回 true. 更正式的说,如果这个队列中包含至少一个 e(o.equals(e))
* 这种情况下才返回 true.
*
*/
public boolean contains(Object o);
/**
*
* 删除此队列中的所有可用元素并将它们添加到给定的集合中. 这个操作比反复 polling 这个队列更加有效.
* 当相关的异常抛出时,可能会导致将元素添加到集合c的过程中该元素不在任何一个集合中。尝试将一个队列中的
* 元素批量保存到队列本身会抛出IllegalArgumentException.
* 当在执行 drainTo 的过程中如果指定的集合 c 被修改了,那么这种情况产生的结果是未知的.
*
*/
int drainTo(Collection<? super E> c);
/**
*
* 将指定数量的元素从队列中删除,并保存到指定的集合中.
* 当相关的异常抛出时,可能会导致将元素添加到集合 c 的过程中该元素不在任何一个集合中.
* 尝试将一个队列中的元素批量保存到队列本身会抛出 IllegalArgumentException.
* 当在执行 drainTo 的过程中如果指定的集合 c 被修改了,那么这种情况产生的结果是未知的.
*/
int drainTo(Collection<? super E> c, int maxElements);
}
发表评论
-
AtomicInteger 源码分析
2019-01-24 16:11 995AtomicInteger 是如何实现原子操作的了? 答案是 ... -
SynchronousQueue 源码初步分析
2019-01-23 16:56 1233简介: 就是一个 put 操作必须和 take 操作对应. 如 ... -
LinkedBlockingDeque 源码分析
2019-01-22 16:44 1488简介: LinkedBlockingDeque 是一个双端队 ... -
CopyOnWriteArrayList 源码分析
2019-01-19 16:02 1367简介: 写操作时上锁,然后拷贝一个新的数组,操作新数组,将当 ... -
CyclicBarrier 源码分析
2019-01-19 13:55 1512简介: CyclicBarrier 实现这么一个功能,比如说吃 ... -
Semaphore 源码分析
2019-01-18 17:53 1367介绍: Semaphore 用于对某一物理或逻辑资源被同一时间 ... -
ThreadPoolExecutor 源码分析
2019-01-16 11:10 2123首先说明的是,这个和 ReadWriteLock 一样,同样是 ... -
分析 Java 任务的执行
2019-01-13 20:26 2052Java 并发中会大量使用到多线程,那么Java是如何使用多线 ... -
LinkedBlockingQueue源码分析
2019-01-13 20:16 640LinkedBlockingQueue 其实实现的是一个生产者 ... -
FutureTask WaitNode 源码分析
2019-01-11 17:24 1967waiter 存放等待的线程,这是一个单链表,没有用 lock ... -
关于 Future 类 boolean cancel(boolean mayInterruptIfRunning) 的疑问
2019-01-11 09:07 0boolean cancel(boolean mayInter ... -
关于 Future 类 boolean cancel(boolean mayInterruptIfRunning) 的疑问
2019-01-10 21:05 2384boolean cancel(boolean mayInter ... -
InheritableThreadLocal 源码分析
2019-01-07 11:58 1288/* * Copyright (c) 1998, 2004, ... -
ThreadLocal 源码分析
2019-01-05 16:18 2324说明: 每个线程内部持有一个 ThreadLocalMap ... -
ReentrantReadWriteLock 简介
2019-01-04 15:54 14281.首先说明 ReentrantReadWriteLock 和 ... -
CountDownLatch 源码分析
2019-01-03 18:31 1090思路分析: CountDownLatch 的思路是:首先申 ... -
ConditionObject 类分析
2018-12-24 14:28 647Condition 实现主要通过两个方法. ① await ...
相关推荐
Java集合框架源码分析 Java集合框架是Java语言中一个非常重要的组件,提供了多种数据结构和算法来存储和操作数据。在Java集合框架中,LinkedList、ArrayList、HashMap、TreeMap等都是非常常用的数据结构。本文将对...
本文将深入探讨Java线程池的源码分析,并对比不同类型的线程池,以帮助开发者更好地理解和利用这一强大的工具。 首先,我们要理解Java线程池的核心类`java.util.concurrent.ThreadPoolExecutor`,它是所有自定义...
下面我们将深入分析其主要的实现机制、方法以及源码。 1. **数据结构与容量** `ArrayBlockingQueue` 内部使用一个数组 `items` 来存储元素,因此它的容量在创建时就需要指定,且不可改变。这个容量限制确保了队列...
分析这个测试文件可以帮助我们更好地理解和应用`BlockingQueue`。实际操作中,我们可以通过监控和调优这些代码来优化并发性能,比如调整队列大小,选择适合的实现类,或者优化生产者和消费者的处理速度。
### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...
`javaThread`项目则是一个专门针对Java并发编程进行源码分析的实战手册,它旨在帮助开发者深入理解Java线程的内部机制和并发工具的实现原理。 在Java中,`Thread`类是所有线程的基础,它是Java并发模型的核心。`...
源码分析是一个复杂的过程,通过阅读源码,开发者可以学习到以下关键知识点: 1. **Java虚拟机(JVM)的工作机制**:Sun JDK中的源码揭示了JVM如何加载类、执行字节码、垃圾收集等关键过程。例如,`java.lang....
集合源码分析 AboutJava ==java 相关知识(理论,代码)相关知识均是看书,博客等地方获取再由自己整理,如存在侵权,请告诉我== Java基础 (缺少代码) IO 缺少图片 BIO NIO JAVA8 异常 --- 容器 基本容器 集合 Map ...
源码分析:BlockingQueue 接口 集合框架 (第 17 篇) 源码分析:CopyOnWriteArrayList 与 CopyOnWriteArraySet 二、:radio::radio::radio:JVM(Java虚拟机) Java虚拟机 (第 06 篇) 深入理解:类文件结构 Java...
4. **源码分析** - 通常,实现线程安全队列的源码会包含如下关键部分: - **插入操作**:确保在队尾添加元素时不会与其他线程的读写操作冲突。 - **移除操作**:在队头移除元素时,确保元素只被一个线程处理一次...
《Java并发编程源码》是深入理解Java多线程编程技术的重要参考资料,它包含了实际案例和源代码,有助于...源码学习是提高编程技能的有效途径,特别是对于复杂的并发场景,源码分析能帮助我们更好地理解和解决问题。
源码分析: 1. **线程与多线程**:Java中的线程是并发编程的基础,通过`Thread`类或实现`Runnable`接口可以创建线程。源码中可能包含各种线程的创建和管理方式,如`start()`方法启动线程,`join()`等待线程结束,...
项目涵盖了并发编程的核心概念、无锁并行计算框架的使用、高级特性、底层源码分析以及与Netty的整合实战。通过本项目,开发者可以深入理解并发编程的原理,掌握Disruptor框架的使用,并能够构建高性能的并发应用。 ...
《backport-util-concurrent_java_backport_源码分析》 backport-util-concurrent是一个Java库,它的主要目的是将Java 5中的并发工具类(java.util.concurrent)回移植到Java 1.3和1.4等早期版本。这个库使得开发者...
3. **Java源码分析**: - 源码阅读可以帮助我们了解内部实现细节,提升编程技巧。例如,可以研究ArrayList和LinkedList的增删改查操作的效率差异,或者研究TreeMap如何保证排序。 - 通过源码学习数据结构的抽象和...
源码分析可以帮助理解它们如何保证线程安全和并发性能。 5. **原子类**:`Atomic`系列类(如`AtomicInteger`、`AtomicLong`、`AtomicReference`等)提供了无锁编程的支持。源码中可能会展示如何使用原子类实现高效...
在这个主题中,我们将深入探讨几个关键的多线程设计模式,以及如何通过源码分析来理解它们的实现。 1. **生产者消费者模式**:这种模式用于在两个线程之间共享资源,一个线程负责生成数据(生产者),另一个线程...
5. **源码分析**:本压缩包中的`DatabasePool`可能是自定义的连接池实现。通过阅读源码,我们可以理解连接池的核心机制,包括连接的创建、维护、检测和回收等。 6. **性能优化**:优秀的连接池实现会考虑连接的生命...
生产者消费者问题是多线程编程中的一个经典案例,主要展示了线程间的同步和通信。...通过分析源码,我们可以深入理解如何利用`BlockingQueue`等工具解决这类问题,并学习到如何在多线程环境中确保程序的正确性和性能。