
java多线程
说天阔丶
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于java多线程方式的生产者消费者模式实现
第一种实现: [code="java"] //这种实现有一个问题,produce和consume用的是同一把锁。所以生产的时候就不能消费,消费的时候不能生产. public class Storage implements StorageInterface{ private final int MAX_NUM = 100; private LinkedList lists = n...原创 2017-05-05 15:52:31 · 112 阅读 · 0 评论 -
读LinkedBlockingDeque源码
[code="java"] //这是一个支持双端操作的可阻塞队列 //先看构造函数 public LinkedBlockingDeque() { this(Integer.MAX_VALUE); } public LinkedBlockingDeque(int capacity) { if (capacity ...原创 2017-08-21 14:26:23 · 147 阅读 · 0 评论 -
读CopyOnWriteArrayList源码
[code="java"] //在该集合上的写操作都是在原有的副本上进行的操作。这样可以在大量需要遍历的场景下提升性能。这也是一种读写分离思想的体现。 //先看构造函数 public CopyOnWriteArrayList() { setArray(new Object[0]); } final void setArray(Object[] a) { ...原创 2017-08-22 12:59:15 · 121 阅读 · 0 评论 -
读ConcurrentHashMap源码
[code="java"] //先看构造函数 public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL); } public ConcurrentHashMap(int initialCapacity) {...原创 2017-08-31 11:21:39 · 132 阅读 · 0 评论 -
读ConcurrentLinkedQueue
[code="java"] //这是一个无阻塞的队列没有加任何锁全部利用CAS机制实现。效率极高。 //先看构造函数 public ConcurrentLinkedQueue() { head = tail = new Node(null); } public ConcurrentLinkedQueue(Collection...原创 2017-09-01 11:40:24 · 120 阅读 · 0 评论 -
读CountDownLatch源码
[code="java"] //在完成一组操作之前允许一个或多个线程等待内部用的AQS private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L; ...原创 2017-09-01 14:01:35 · 122 阅读 · 0 评论 -
读CyclicBarrier源码
[code="java"] //一个循环的屏障。所有的线程在屏障处等待其他线程执行完毕。然后再各自执行。 //先看构造函数 public CyclicBarrier(int parties) { this(parties, null); } //barrierAction代表在屏障上等待的最后一个线程已经执行完后,执行的runnable public...原创 2017-09-01 17:59:28 · 242 阅读 · 0 评论 -
读Semaphore源码
[code="java"] //一个信号量,只有在池中还拥有许可时才允许线程继续执行。 //先看构造函数 //默认是非公平模式 public Semaphore(int permits) { sync = new NonfairSync(permits); } NonfairSync(int permits) { super(...原创 2017-09-09 14:58:27 · 134 阅读 · 0 评论 -
读ConcurrentSkipListMap源码
[code="java"] //数据结构是跳表 关于数据结构http://blog.youkuaiyun.com/coslay/article/details/44819823这篇文章写得很好 //另外ConcurrentSkipListSet底层也是用ConcurrentSkipListMap实现的。 //先看构造函数 public ConcurrentSkipListMap() { ...原创 2017-09-21 15:11:15 · 105 阅读 · 0 评论 -
读FutureTask源码
[code="java"] //一个可以异步返回计算的结果 //它同时实现了Future和Runnable //先看构造函数 public FutureTask(Callable callable) { if (callable == null) throw new NullPointerException(); this.c...原创 2017-09-22 16:45:10 · 154 阅读 · 0 评论 -
读ExecutorCompletionService源码
[code="java"] //一个用来管理已完成任务的service,内部封装了一个队列。 //它是CompletionService的一个实现 public class ExecutorCompletionService implements CompletionService //先看构造函数 public ExecutorCompletionService(Executo...原创 2017-09-23 11:22:38 · 185 阅读 · 0 评论 -
读AbstractExecutorService
[code="java"] //他是ExecutorService的部分实现 public abstract class AbstractExecutorService implements ExecutorService //提交一个Runnable任务给AbstractExecutorService执行返回Future public Future submit(Runnable t...原创 2017-09-23 16:34:55 · 165 阅读 · 0 评论 -
读部分ThreadPoolExecutor源码
[code="java"] //线程池 //先看构造方法 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2017-09-25 15:27:34 · 112 阅读 · 0 评论 -
读ScheduledThreadPoolExecutor源码
[code="java"] //一个可以延迟执行的定时任务 //先看构造函数 构造函数最重要的区别是传入了DelayedWorkQueue一个延迟的queue /** 总结:该线程池继承了ThreadPoolExecutor。同时内部封装了一个DelayedWorkQueue和 ScheduledFutureTask。DelayedWorkQueue用于管理任务的新增和获取。Sche...原创 2017-09-25 17:33:01 · 207 阅读 · 0 评论 -
读Executors源码
[code="java"] //一个管理线程创建的类里面都是静态方法 //创建一个corePoolSize和maximumPoolSize相等的线程池也就是当线程数为nThreads时,就不在新增线程了。 public static ExecutorService newFixedThreadPool(int nThreads) { return new Thread...原创 2017-09-29 15:23:24 · 191 阅读 · 0 评论 -
读Exchanger源码
[code="java"] //用于线程间交换数据 public V exchange(V x) throws InterruptedException { if (!Thread.interrupted()) { Object v = doExchange((x == null) ? NULL_ITEM : x, false, 0); ...原创 2017-10-10 11:38:56 · 156 阅读 · 0 评论 -
读SynchronousQueue源码
[code="java"] //先看构造方法 public SynchronousQueue() { this(false); } //公平模式或者非公平模式 public SynchronousQueue(boolean fair) { transferer = fair ? new TransferQueue() : new Trans...原创 2017-08-10 10:51:50 · 224 阅读 · 0 评论 -
读PriorityBlocking源码
[code="java"] //一个基于而为堆的优先级队列,它是无界的。 //先看构造函数: public PriorityBlockingQueue() { this(DEFAULT_INITIAL_CAPACITY, null); } public PriorityBlockingQueue(int initialCapacity, ...原创 2017-08-09 13:47:27 · 92 阅读 · 0 评论 -
java CountDownLatch类的用法
CountDownLatch类中维护了一个计数器,当计数器为0时,释放所有线程。这个类可以用于当所有的资源都初始化后进行操作。 CountDownLatch中的await方法等待计数器达到0,表示所有的线程已经执行完毕。如果计数器不为0,await()方法会一直阻塞等待计数器变为0。而countDown()方法用于递减计数器。 下面是一个计算执行时间的例子: [code="jav...原创 2017-05-09 15:50:54 · 158 阅读 · 0 评论 -
java CyclicBarrier用法
CyclicBarrier主要用于等待一组线程都执行到某个时刻。 它和CountDownLatch的区别:CountDownLatch用在等待某个事件,而CountDownLatch用于等待线程。 CountDownLatch用于一个或者多个线程等待其他一组线程。 CyclicBarrier用于一组线程之间的相互等待。 下面是一个例子: [code="java"] public cla...原创 2017-05-10 10:31:45 · 208 阅读 · 0 评论 -
一个简单的学习多线程缓存的demo
一个简单的学习多线程缓存的demo: [code="java"] //计算 public interface Computable { V compute(A arg) throws InterruptedException; } /** 第一种最简单实现:采用HashMap,直接在compute()方法上加锁这种构建缓存的方式有很大问题, * 如果compute执行...原创 2017-05-10 15:08:15 · 166 阅读 · 0 评论 -
java 线程池原理
简单介绍一下java Executors框架来管理线程池原理: [code="java"] //创建一个线程数大小为3的线程池 Executors.newFixedThreadPool(3); [/code] 1、线程池中的线程如何创建?创建后保存在哪里? [code="java"] public class ThreadPoolExecutor extends Abstract...原创 2017-05-11 15:43:43 · 95 阅读 · 0 评论 -
ReentrantLockd的非公平锁lock方法实现源码解析
[code="java"] //ReetrantLock源码解析: Lock lock = new ReentrantLock(); try { lock.lock(); ....doSomething } finally { lock.unlock(); } //先从我们最常用的这个lock()方法开始.从非公平模式...原创 2017-07-26 15:19:36 · 114 阅读 · 0 评论 -
ReentrantLockd的unlock方法实现源码解析
[code="java"] 读ReentrantLock的unlock()源码: //这个方法:委托到sync的release实现。 public void unlock() { sync.release(1); } public final boolean release(int arg) { //释放锁成功 ...原创 2017-07-26 15:53:22 · 149 阅读 · 0 评论 -
ReentrantLockd的公平锁lock方法实现源码解析
[code="java"] //ReetrantLock公平锁源码解析: /**公平锁调用的是FairSync中的方法与非公平锁比少了判断当前状态的步骤 也即非公平锁线程可以在此时直接插队进入执行。 */ final void lock() { acquire(1); } //和非公平锁的区别是调用了了hasQueuedPrede...原创 2017-07-26 17:45:37 · 186 阅读 · 0 评论 -
ReentrantLockd的其他方法源码解读
[code="java"] //Reentrant的其他方法: //先看lockInterruptibly方法,该方法主要用于如果该线程未被中断则获取锁 public void lockInterruptibly() throws InterruptedException { sync.acquireInterruptibly(1); } pub...原创 2017-07-27 14:19:25 · 113 阅读 · 0 评论 -
java Condtion await方法和signal方法解析
[code="java"]public final void await() throws InterruptedException { //线程已经中断抛出异常 if (Thread.interrupted()) throw new InterruptedException(); //加入队列同时清理队列中状态不是N...原创 2017-07-31 13:48:18 · 566 阅读 · 0 评论 -
java condition的其他方法
[code="java"] //awaitNanos方法是用于在给定毫秒值内沉睡,超出时间或者被唤醒则醒过来。 //和await大部分方法一样,只是在内部多维护了一个毫秒值的时间。 public final long awaitNanos(long nanosTimeout) throws InterruptedException { ...原创 2017-07-31 15:31:11 · 190 阅读 · 0 评论 -
ReentranReadWritetLock的ReadLock源码解析
[code="java"] //ReentrantReadWriteLock的ReadLock //ReadLock的lock方法 public void lock() { sync.acquireShared(1); } public final void acquireShared(int arg) { if (tr...原创 2017-08-02 09:41:54 · 259 阅读 · 0 评论 -
ReentranReadWriteLock的WriteLock源码解读
[code="java"] //ReentrantReadWriteLock的WriteLock //WriteLock的lock方法 public void lock() { sync.acquire(1); } public final void acquire(int arg) { if (!tryAcquire...原创 2017-08-02 13:02:13 · 235 阅读 · 0 评论 -
ArrayBlockingQueue源码解读
[code="java"] //先看构造函数 //初始化一个给定容量的ArrayBlockingQueue public ArrayBlockingQueue(int capacity) { this(capacity, false); } //通过给定的容量初始化内部的数组和锁以及条件。 public ArrayBlockingQueue(int capac...原创 2017-08-03 13:53:59 · 119 阅读 · 0 评论 -
LinkedblockingQueue源码解读
[code="java"] //LinkedBlockQueue //先看构造函数 public LinkedBlockingQueue() { this(Integer.MAX_VALUE); } public LinkedBlockingQueue(int capacity) { if (capacity原创 2017-08-04 13:03:31 · 134 阅读 · 0 评论 -
读DelayQueen源码
[code="java"] //一个基于二叉堆优先级的延迟取出队列。 //先看构造函数。 public DelayQueue() {} public DelayQueue(Collection原创 2017-08-07 15:16:26 · 292 阅读 · 0 评论 -
读ThreadLocal源代码
[code="java"] //可以存取线程局部变量 //先看构造函数 public ThreadLocal() { } //设置值 public void set(T value) { Thread t = Thread.currentThread(); //这个Map以this为key ThreadLocalMap map =...原创 2017-10-12 15:00:38 · 153 阅读 · 0 评论