并发
JH_WW
这个作者很懒,什么都没留下…
展开
-
Excutor源码解析
Current 之Excutor package java.util.concurrent; /** * *这是一个执行runnable的任务,这个接口从技术层面为每个任务如何运行提供一种解耦的方式, *包括线程使用的细节,时序安排等。Excutor是经常被使用的,除了明确的创建线程。 *例如,如果你使用一系列的线程不是new Thread(new(RunnableTask())...翻译 2018-04-09 09:18:20 · 214 阅读 · 0 评论 -
ReentrantReadWriteLock源码解析
NonfairSync ReentrantReadWriteLock static final class NonfairSync extends Sync { private static final long serialVersionUID = -8159625535654395037L; final boolean writerShouldBlock() { ...原创 2018-05-20 16:11:30 · 168 阅读 · 0 评论 -
AQS详解
Node节点 获取同步状态失败的线程,等待的状态,以及先驱和后继节点 将其加入同步队列,同事会阻塞当前线程,同步状态释放时, 会把首节点中的线程唤醒,使其再次获取同步状态 static final class Node { /** 标志着一个节点是处在共享模式*/ static final Node SHARED = new Node(); ...原创 2018-05-20 11:03:28 · 163 阅读 · 0 评论 -
ReentrantLock与AQS
ReentrantLock的Sync继承自AQS Sync实现了nonfairTryAcquire 、tryRelease、isHeldExclusively, 而TryAcquire和lock留给子类实现 abstract static class Sync extends AbstractQueuedSynchronizer { private static fina...原创 2018-05-19 21:28:59 · 181 阅读 · 0 评论 -
同步状态
同步状态 public enum State { /** 线程新建未开始 */ NEW, /** 在虚拟机运行但是可能在等待其他来自操作系统的资源 */ RUNNABLE, /** 一个线程在等待监视器锁的阻塞状态为了进入或者重入一个同步块或者方法 */ BLOCKED, /** 无限等待其他线程执...原创 2018-05-19 16:54:33 · 788 阅读 · 0 评论 -
多线程的中断
Thread.interrupted() 测试当前线程是否已经中断 public static boolean interrupted() { return currentThread().isInterrupted(true); } 调用: Thread.curr...原创 2018-05-18 19:39:51 · 193 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock源码分析 import java.util.Collection; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; /** ...翻译 2018-04-14 10:55:27 · 250 阅读 · 0 评论 -
ReadWriteLock源码分析
ReadWriteLock源码分析 /** * Create by ~JH~ on 2018/4/13 */ /** *一个读写锁维持一对锁的联系,一个是只读锁,一个是只写锁,读锁在多线程时是同步的只要没有写操作。 *写锁是排它锁 *所有实现了这个接口的类都必须保证写锁内存同步对读锁的影响, * 一个成功获取读锁的线程将会看到所有更新的在释放写锁之前 * 读锁允许高并发的...翻译 2018-04-14 08:37:13 · 150 阅读 · 0 评论 -
Lock源码分析
Lock源码分析 /** * Create by ~JH~ on 2018/4/13 */ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; /** *实现Lock类可以获得在synchronized方法和声明上专用的操作。 * 他们允许更加灵活的结构可能会有相当不同...翻译 2018-04-13 21:47:21 · 204 阅读 · 0 评论 -
Volatile关键字
volatile关键字原理 加了volatile关键字的变量在汇编层面的指令会加上Lock前缀 加了Lock会执行以下两步:1.将当前处理器缓存行的数据写回内存。2.这个写操作会使得其他CPU里面缓存了相应的数据失效 一般变量数据改变不会立即写回内存,只是更新缓存行的数据 加了volatile关键字的变量会将变量立即写回内存,但是其他cpu内的数据仍然不同步, ...原创 2018-04-22 13:29:06 · 174 阅读 · 0 评论 -
ExcutorService源码解析
ExcutorService /** * Create by ~JH~ on 2018/4/9 */ import java.util.List; import java.util.Collection; import java.util.concurrent.*; /** *ExcutorService可以停止,这个操作会导致拒绝生产新的任务。 * 两个不同的方法提供停止一个Ex...翻译 2018-04-11 00:30:40 · 409 阅读 · 0 评论 -
Future源码分析
Future源码分析 /** * Create by ~JH~ on 2018/4/10 */ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; /** *Future代表一步计算的结果。他的方法都检查计算是否完成,为了等待完成和恢复计算结果。 *当计算完成,结...翻译 2018-04-11 00:07:14 · 429 阅读 · 0 评论 -
ReentrantReadWriteLock源码分析
ReentrantReadWriteLock源码分析 /** * Create by ~JH~ on 2018/4/14 */ import java.util.concurrent.TimeUnit; import java.util.Collection; import java.util.concurrent.locks.AbstractQueuedSynchronizer; ...翻译 2018-04-14 15:51:16 · 139 阅读 · 0 评论 -
Callable源码分析
Callable源码分析 /** * Create by ~JH~ on 2018/4/9 */ /** *一个任务返回的结果可能抛出异常,继承者定义了一个单例的没有参数的方法被称为call *Callable接口与Runnable接口相似,这两个都是为那些可能被其他线程的执行的实例的类设计的 * Runnable不会返回一个结果,也不会跑出checked异常。 *Execu...翻译 2018-04-09 15:29:08 · 383 阅读 · 0 评论 -
并发编程实战
在并发程序中,使用和共享对象的一些最有效的策略: 线程限制:一个线程限制的对象的,通过限制在线程中,而被线程占用,且只能被占有她的线程修改 共享只读:一个共享的只读对象,在没有额外同步的情况下,可以被多个线程并发的访问,但是任何线程都不能修改它,共享只读对象包括可变对象和高效不可变对象。 共享线程安全:一个线程安全的对象在内部进行同步,所以其他线程无须额外的同步,就可以通过公共接口随意访问它。...原创 2018-08-11 17:46:52 · 751 阅读 · 0 评论