![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 91 阅读 · 0 评论 -
读LinkedBlockingDeque源码
[code="java"]//这是一个支持双端操作的可阻塞队列//先看构造函数 public LinkedBlockingDeque() { this(Integer.MAX_VALUE); }public LinkedBlockingDeque(int capacity) { if (capacity ...原创 2017-08-21 14:26:23 · 105 阅读 · 0 评论 -
读CopyOnWriteArrayList源码
[code="java"]//在该集合上的写操作都是在原有的副本上进行的操作。这样可以在大量需要遍历的场景下提升性能。这也是一种读写分离思想的体现。//先看构造函数public CopyOnWriteArrayList() { setArray(new Object[0]); } final void setArray(Object[] a) {...原创 2017-08-22 12:59:15 · 87 阅读 · 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 · 86 阅读 · 0 评论 -
读ConcurrentLinkedQueue
[code="java"]//这是一个无阻塞的队列没有加任何锁全部利用CAS机制实现。效率极高。//先看构造函数public ConcurrentLinkedQueue() { head = tail = new Node(null); }public ConcurrentLinkedQueue(Collection...原创 2017-09-01 11:40:24 · 84 阅读 · 0 评论 -
读CountDownLatch源码
[code="java"]//在完成一组操作之前允许一个或多个线程等待内部用的AQSprivate static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L; ...原创 2017-09-01 14:01:35 · 87 阅读 · 0 评论 -
读CyclicBarrier源码
[code="java"]//一个循环的屏障。所有的线程在屏障处等待其他线程执行完毕。然后再各自执行。//先看构造函数 public CyclicBarrier(int parties) { this(parties, null); }//barrierAction代表在屏障上等待的最后一个线程已经执行完后,执行的runnablepublic...原创 2017-09-01 17:59:28 · 185 阅读 · 0 评论 -
读Semaphore源码
[code="java"]//一个信号量,只有在池中还拥有许可时才允许线程继续执行。//先看构造函数//默认是非公平模式public Semaphore(int permits) { sync = new NonfairSync(permits); }NonfairSync(int permits) { super(...原创 2017-09-09 14:58:27 · 99 阅读 · 0 评论 -
读ConcurrentSkipListMap源码
[code="java"]//数据结构是跳表 关于数据结构http://blog.csdn.net/coslay/article/details/44819823这篇文章写得很好//另外ConcurrentSkipListSet底层也是用ConcurrentSkipListMap实现的。//先看构造函数public ConcurrentSkipListMap() { ...原创 2017-09-21 15:11:15 · 80 阅读 · 0 评论 -
读FutureTask源码
[code="java"]//一个可以异步返回计算的结果//它同时实现了Future和Runnable//先看构造函数 public FutureTask(Callable callable) { if (callable == null) throw new NullPointerException(); this.c...原创 2017-09-22 16:45:10 · 117 阅读 · 0 评论 -
读ExecutorCompletionService源码
[code="java"]//一个用来管理已完成任务的service,内部封装了一个队列。//它是CompletionService的一个实现public class ExecutorCompletionService implements CompletionService//先看构造函数public ExecutorCompletionService(Executo...原创 2017-09-23 11:22:38 · 129 阅读 · 0 评论 -
读AbstractExecutorService
[code="java"]//他是ExecutorService的部分实现public abstract class AbstractExecutorService implements ExecutorService//提交一个Runnable任务给AbstractExecutorService执行返回Futurepublic Future submit(Runnable t...原创 2017-09-23 16:34:55 · 107 阅读 · 0 评论 -
读部分ThreadPoolExecutor源码
[code="java"]//线程池//先看构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2017-09-25 15:27:34 · 75 阅读 · 0 评论 -
读ScheduledThreadPoolExecutor源码
[code="java"]//一个可以延迟执行的定时任务//先看构造函数 构造函数最重要的区别是传入了DelayedWorkQueue一个延迟的queue/**总结:该线程池继承了ThreadPoolExecutor。同时内部封装了一个DelayedWorkQueue和ScheduledFutureTask。DelayedWorkQueue用于管理任务的新增和获取。Sche...原创 2017-09-25 17:33:01 · 155 阅读 · 0 评论 -
读Executors源码
[code="java"]//一个管理线程创建的类里面都是静态方法//创建一个corePoolSize和maximumPoolSize相等的线程池也就是当线程数为nThreads时,就不在新增线程了。 public static ExecutorService newFixedThreadPool(int nThreads) { return new Thread...原创 2017-09-29 15:23:24 · 146 阅读 · 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 · 117 阅读 · 0 评论 -
读SynchronousQueue源码
[code="java"]//先看构造方法public SynchronousQueue() { this(false); } //公平模式或者非公平模式 public SynchronousQueue(boolean fair) { transferer = fair ? new TransferQueue() : new Trans...原创 2017-08-10 10:51:50 · 198 阅读 · 0 评论 -
读PriorityBlocking源码
[code="java"]//一个基于而为堆的优先级队列,它是无界的。//先看构造函数: public PriorityBlockingQueue() { this(DEFAULT_INITIAL_CAPACITY, null); }public PriorityBlockingQueue(int initialCapacity, ...原创 2017-08-09 13:47:27 · 64 阅读 · 0 评论 -
java CountDownLatch类的用法
CountDownLatch类中维护了一个计数器,当计数器为0时,释放所有线程。这个类可以用于当所有的资源都初始化后进行操作。CountDownLatch中的await方法等待计数器达到0,表示所有的线程已经执行完毕。如果计数器不为0,await()方法会一直阻塞等待计数器变为0。而countDown()方法用于递减计数器。下面是一个计算执行时间的例子:[code="jav...原创 2017-05-09 15:50:54 · 127 阅读 · 0 评论 -
java CyclicBarrier用法
CyclicBarrier主要用于等待一组线程都执行到某个时刻。它和CountDownLatch的区别:CountDownLatch用在等待某个事件,而CountDownLatch用于等待线程。CountDownLatch用于一个或者多个线程等待其他一组线程。CyclicBarrier用于一组线程之间的相互等待。下面是一个例子:[code="java"]public cla...原创 2017-05-10 10:31:45 · 158 阅读 · 0 评论 -
一个简单的学习多线程缓存的demo
一个简单的学习多线程缓存的demo:[code="java"]//计算public interface Computable { V compute(A arg) throws InterruptedException;}/** 第一种最简单实现:采用HashMap,直接在compute()方法上加锁这种构建缓存的方式有很大问题, * 如果compute执行...原创 2017-05-10 15:08:15 · 129 阅读 · 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 · 72 阅读 · 0 评论 -
ReentrantLockd的非公平锁lock方法实现源码解析
[code="java"]//ReetrantLock源码解析: Lock lock = new ReentrantLock(); try { lock.lock(); ....doSomething } finally { lock.unlock(); } //先从我们最常用的这个lock()方法开始.从非公平模式...原创 2017-07-26 15:19:36 · 86 阅读 · 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 · 115 阅读 · 0 评论 -
ReentrantLockd的公平锁lock方法实现源码解析
[code="java"]//ReetrantLock公平锁源码解析:/**公平锁调用的是FairSync中的方法与非公平锁比少了判断当前状态的步骤 也即非公平锁线程可以在此时直接插队进入执行。*/ final void lock() { acquire(1); }//和非公平锁的区别是调用了了hasQueuedPrede...原创 2017-07-26 17:45:37 · 148 阅读 · 0 评论 -
ReentrantLockd的其他方法源码解读
[code="java"]//Reentrant的其他方法://先看lockInterruptibly方法,该方法主要用于如果该线程未被中断则获取锁 public void lockInterruptibly() throws InterruptedException { sync.acquireInterruptibly(1); } pub...原创 2017-07-27 14:19:25 · 82 阅读 · 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 · 519 阅读 · 0 评论 -
java condition的其他方法
[code="java"]//awaitNanos方法是用于在给定毫秒值内沉睡,超出时间或者被唤醒则醒过来。//和await大部分方法一样,只是在内部多维护了一个毫秒值的时间。public final long awaitNanos(long nanosTimeout) throws InterruptedException { ...原创 2017-07-31 15:31:11 · 137 阅读 · 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 · 214 阅读 · 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 · 181 阅读 · 0 评论 -
ArrayBlockingQueue源码解读
[code="java"]//先看构造函数//初始化一个给定容量的ArrayBlockingQueuepublic ArrayBlockingQueue(int capacity) { this(capacity, false); }//通过给定的容量初始化内部的数组和锁以及条件。public ArrayBlockingQueue(int capac...原创 2017-08-03 13:53:59 · 92 阅读 · 0 评论 -
LinkedblockingQueue源码解读
[code="java"]//LinkedBlockQueue//先看构造函数public LinkedBlockingQueue() { this(Integer.MAX_VALUE); }public LinkedBlockingQueue(int capacity) { if (capacity原创 2017-08-04 13:03:31 · 95 阅读 · 0 评论 -
读DelayQueen源码
[code="java"]//一个基于二叉堆优先级的延迟取出队列。//先看构造函数。public DelayQueue() {}public DelayQueue(Collection原创 2017-08-07 15:16:26 · 253 阅读 · 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 · 116 阅读 · 0 评论