多线程
Sam Sho
姑苏城外,技术一枚
展开
-
JDK多线程基础(12):并发数据结构(集合)
文章目录ConcurrentModificationException 异常并发 List简介详解SynchronizedListCopyOnWriteArrayListVector并发 Set并发 Map简介ConcurrentHashMap (JDK7、8 设计差别较大)JDK7源码JDK7设计: 使用`Segment`分段锁,减小锁粒度JDK8设计JDK8源码参考ConcurrentMod...原创 2019-04-16 16:52:09 · 370 阅读 · 0 评论 -
JDK多线程基础(15):并行程序设计模式
文章目录FutureMaster-Worker原理实现模式结构代码实现Guarded Suspension 保护暂停、漏斗模型原理简单实现不变模式 final不变模式使用场景不变模式实现JDK中的实现Producer-Consumer 生产者-消费者原理分析简单实现参考FutureFuture 模式的核心在于去除了主函数中的等待时间,并使得原本需要等待的时间段可以处理其他的业务逻辑从而充分利...原创 2019-04-21 08:42:35 · 199 阅读 · 0 评论 -
JDK多线程基础(14):同步工具
文章目录Semaphore简介源码示例CountDownLatch简介源码API示例CyclicBarrierExchanger参考Semaphore简介无论是内部锁synchronized 还是 ReentrantLock ,一次都只允许一个线程访问一个资源Semaphore 是对锁的扩展,允许多个线程同时访问某一资源源码构造函数public Semaphore(int ...原创 2019-04-21 08:11:46 · 165 阅读 · 0 评论 -
JDK多线程基础(13):并发数据结构(队列)
文章目录并发 QueueConcurrentLinkedQueue 非阻塞队列简介源码分析简单示例BlockingQueue 阻塞队列常用队列常用方法LinkedBlockingQueue 与 ArrayBlockingQueue 区别简单示例Deque(Double-Ended-Queue)双向队列(JDK1.6 以后)简介LinkedBlockingDeque参考并发 QueueConcu...原创 2019-04-21 07:59:14 · 219 阅读 · 0 评论 -
JDK多线程基础(11):无锁并行,JDK原子操作
文章目录非阻塞同步/无锁并行简介CAS 算法JDK 的原子操作原子操作类(java.util.concurrent.atomic)原子类的核心方法,以 AtomicInteger 为例getAndSet 方法为例性能比较Amino 框架(TODO)参考非阻塞同步/无锁并行简介基于锁的同步方式,也是一种阻塞的线程间的同步方式,无论是信号量(Semaphore)、CountDownLatch、...原创 2019-04-13 15:34:49 · 417 阅读 · 0 评论 -
JDK多线程基础(10):锁等待与唤醒 Condition
文章目录简介`Condition`接口接口方法简单示例应用阻塞队列JDK 阻塞队列实现:ArrayBlockingQueue参考简介线程间的协调工作光有锁是不够的,在业务层,需要复杂的线程间协作逻辑。Condition 对象可以实现线程间的复杂协作Condition 是与锁相关的。通过lock.newCondition()方法可以生成一个与锁绑定的Condition对象Condition...原创 2019-04-13 15:23:45 · 354 阅读 · 0 评论 -
JDK多线程基础(9):读写分离锁 ReadWriteLock
文章目录读写锁 ReadWriteLock简介简单实现参考读写锁 ReadWriteLock简介读写分离锁是减少锁粒度的一种特殊情况,是对系统功能点的分割,其分割了读与写两种操作适合场景:读多写少的场合。交互逻辑如下:读锁之间是相容的,读锁在读读操作是不需要相互等待,提升多线程读数据的性能写锁的占用是独占的读锁写锁读锁可访问不可访问写锁不可访...原创 2019-04-13 15:20:36 · 276 阅读 · 0 评论 -
JDK多线程基础(8):重入锁 ReentrantLock
文章目录重入锁 ReentrantLock重入锁`ReentrantLock` 和 内部锁`synchronized`重入锁 `ReentrantLock` 方法详解获取锁的方法其他方法参考重入锁 ReentrantLock重入锁ReentrantLock 和 内部锁synchronized重入锁ReentrantLock 相对于 内部锁synchronized,功能更加强大,使用较为复杂...原创 2019-04-13 15:17:44 · 200 阅读 · 0 评论 -
JDK多线程基础(7):有返回的线程Callable接口以及 Future 模式
文章目录Callable 接口Runnable 与 CallableJDK 的 Future 实现Future 模式Future 接口FutureTask 类`ExecutorService` 执行一个 Callable任务Future 使用执行一个任务执行多个任务Guava 的实现使用 ListenableFuture 提交任务使用 FutureTask 提交任务提交一组任务其他功能(具体见 G...原创 2019-04-13 15:13:13 · 452 阅读 · 0 评论 -
JDK多线程基础(6):线程池(ThreadPoolExecutor)详解
文章目录线程池 ThreadPoolExecutor`Executors` 工厂本质ThreadPoolExecutor 详解构造方法详解任务队列拒绝策略自定义线程池实现优化线程池大小扩展 ThreadPoolExecutor:经验如何确定合适数量的线程spring应用中线程池使用参考线程池 ThreadPoolExecutorExecutors 工厂本质Executors 线程池工厂类提供...原创 2019-04-13 14:47:56 · 458 阅读 · 0 评论 -
JDK多线程基础(5):线程池(Executors)详解
文章目录JDK 线程池简介线程池 Executor 框架Executors 线程池工厂类一般线程池定时线程池ExecutorService 详解ExecutorService api详解总结参考JDK 线程池简介一个系统的资源有限,线程的创建销毁需要时间与资源、线程本身占用内存(OOM),大量线程回收给GC带来压力对于线程的使用必须掌握一个度,在有限的范围内,适当的增加线程可以明显的提高...原创 2019-04-13 12:24:07 · 347 阅读 · 0 评论 -
JDK多线程基础(4):Java内存模型与 Volatile
文章目录Java 内存模型主内存与线程工作内存工作内存与主内存交互Volatile 关键字关键字分析Volatile 使用方法参考Java 内存模型主内存与线程工作内存主内存:所有线程共享,存放共享变量线程工作内存:每一个线程有一块工作内存区,存放着共享变量的拷贝。当线程执行时,它在自己的工作内存中操作这些变量,其他线程不可见工作内存与主内存交互一个线程可以执行的操作有使用(us...原创 2019-04-13 12:19:03 · 105 阅读 · 0 评论 -
JDK多线程基础(3):ThreadLocal与线程范围内的数据共享
文章目录线程范围内的数据共享表述简单实现ThreadLocal 实现ThreadLocal 源码分析源码主要的类主要方法使用注意ThreadLocal 应用场景Spring,Hibernate等框架中对于多线程的处理开源的 Mybatis 分页类库 [Mybatis-PageHelper](https://github.com/pagehelper/Mybatis-PageHelper/blob/...原创 2019-04-13 12:12:35 · 194 阅读 · 0 评论 -
JDK多线程基础(2):线程互斥与同步(synchronized)
文章目录线程互斥(线程安全)synchronized 简介synchronized 用法线程同步(多线程复杂交互)方法简介示例代码synchronized 总结参考线程互斥(线程安全)synchronized 简介synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取...原创 2019-04-13 12:06:18 · 192 阅读 · 0 评论 -
JDK多线程基础(1):线程的简单实现与管理
文章目录多线程常见的问题多线程实现实现方式实现示例线程管理参考多线程常见的问题用多线程的目的充分利用CPU资源,并发做多件事情单核CPU机器上适不适合用多线程适合。如果是单线程,线程中需要等在IO操作,此时CPU就空闲出来了线程什么时候回让出CPU阻塞时、wait、await、等待IOsleepyield 主动让出运行结束线程是什么最小的执行单...原创 2019-04-13 11:56:41 · 211 阅读 · 0 评论 -
JDK多线程基础(16):锁的性能与优化
文章目录避免死锁减少锁持有时间减小锁粒度:缩小锁定对象的范围锁分离读写锁:读锁、写锁的分离锁分离:独占锁也可以分离重入锁与内部锁锁粗化自旋锁锁消除与逃逸分析锁偏向参考避免死锁死锁问题是多线程特有的问题。在死锁时,线程间相互等待资源,而不释放自身的资源,导致无穷尽的等待,其结果是系统任务永远无法执行完成。死锁出现的条件互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因...原创 2019-04-21 10:51:03 · 203 阅读 · 0 评论