随笔分类 -  多线程

1 2 3 下一页
可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁
摘要:1.可重入锁 如果锁具备可重入性,则称作为可重入锁。 (转)可重入和不可重入 2011-10-04 21:38 这种情况出现在多任务系统当中,在任务执行期间捕捉到信号并对其进行处理时,进程正在执行的指令序列就被信号处理程序临时中断。如果从信号处理程序返回,则继续执行进程断点处的正常指令序列,从重新恢 阅读全文
posted @ 2017-01-03 10:44 duanxz 阅读(3354) 评论(0) 推荐(0) 编辑
虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
摘要:高效并发是JDK 1.6的一个重要主题,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁削除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locki 阅读全文
posted @ 2016-11-24 23:26 duanxz 阅读(805) 评论(0) 推荐(1) 编辑
thread-safe之1:Java的线程安全(共享数据的5种场景、synchronized与reentrantLock区别)
摘要:竞态条件 线程之间共享堆空间。同一个程序多线程访问同一个资源时,如果对资源的访问顺序敏感,就称存在竞态条件,代码区成为临界区。 例如:先检测后执行。执行依赖于检测的结果,而检测结果依赖于多个线程的执行时序,而多个线程的执行时序通常情况下是不固定不可判断的,从而导致执行结果出现各种问题。 线程安全 什 阅读全文
posted @ 2016-11-24 23:25 duanxz 阅读(1248) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”11之 Semaphore信号量的原理
摘要:一、Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁",是基于AQS实现的,通过state变量来实现共享。通过调用acquire方法,对state值减去一,当调用release的时候,对state值加一。当state变量小于0的时候,在AQS队列中阻塞等待。 信号量 阅读全文
posted @ 2016-11-14 22:15 duanxz 阅读(1044) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
摘要:CyclicBarrier简介 CyclicBarrier是一个同步辅助类,CyclicBarrier,就是一个计数器栅栏,也就是一个计数器开关。允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循 阅读全文
posted @ 2016-11-14 22:14 duanxz 阅读(546) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
摘要:概要 前面对"独占锁"和"共享锁"有了个大致的了解;和ReadWriteLock.ReadLock一样,CountDownLatch的本质也是一个"共享锁"。 CountDownLatch简介 CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程 阅读全文
posted @ 2016-11-14 22:13 duanxz 阅读(538) 评论(0) 推荐(1) 编辑
Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
摘要:ReadWriteLock 和 ReentrantReadWriteLock介绍 ReadWriteLock,顾名思义,是读写锁。它维护了一对相关的锁 — — “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。“读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。“写入锁”用于写 阅读全文
posted @ 2016-11-14 22:13 duanxz 阅读(553) 评论(0) 推荐(0) 编辑
Java多线程系列--AQS之 LockSupport
摘要:concurrent包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS(JAVA CAS原理、unsafe、AQS)框架借助于两个类: Unsafe(提供CAS操作) 《AQS之:Unsafe(java可直接操作内存(),挂起与恢复,CAS操作)》 LockSup 阅读全文
posted @ 2016-11-14 22:12 duanxz 阅读(1367) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”05之 非公平锁
摘要:概要 前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析。内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基于JDK1.7.0_40)关于锁的数据结构请参考"Java多线程系列--“JUC锁”03之 公平锁(一) ",锁的使用示 阅读全文
posted @ 2016-11-14 22:11 duanxz 阅读(457) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”06之 Condition条件
摘要:Condition介绍 Condition的作用是对锁进行更精确的控制。Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的n 阅读全文
posted @ 2016-11-14 22:11 duanxz 阅读(449) 评论(0) 推荐(1) 编辑
Java多线程系列--“JUC锁”04之 公平锁(二)
摘要:概要 前面一章,我们学习了“公平锁”获取锁的详细流程;这里,我们再来看看“公平锁”释放锁的过程。内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系列--“JUC锁”03之 公平锁(一)”,锁的使用示例请参考“Java多线程系列--“JUC锁”02 阅读全文
posted @ 2016-11-14 22:09 duanxz 阅读(486) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”03之 公平锁(一)
摘要:概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40) 一. tryAcquire() 二. addWaiter() 三. acquireQueued() 四. selfIn 阅读全文
posted @ 2016-11-14 22:08 duanxz 阅读(533) 评论(0) 推荐(0) 编辑
Java多线程系列--“JUC锁”01之 框架
摘要:本章,我们介绍锁的架构;后面的章节将会对它们逐个进行分析介绍。目录如下:01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock03. Java多线程系列--“JUC锁”03之 公平锁(一)04. Java多线程系列-- 阅读全文
posted @ 2016-11-11 17:35 duanxz 阅读(690) 评论(0) 推荐(1) 编辑
并发容器之ConcurrentSkipListSet
摘要:概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍。内容包括:ConcurrentSkipListSet介绍ConcurrentSkipListSet原理和数据结构ConcurrentSkipListSet函数列表Concurrent 阅读全文
posted @ 2016-08-05 17:25 duanxz 阅读(8162) 评论(0) 推荐(0) 编辑
深入ThreadLocal之三(ThreadLocal可能引起的内存泄露)
摘要:threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用threadlocal的remove方法. 在threadlocal的生命周期中,都存 阅读全文
posted @ 2016-04-29 09:27 duanxz 阅读(1422) 评论(1) 推荐(1) 编辑
深入ThreadLocal之一
摘要:线程封闭机制强调局部的概念,就是在写代码的时候,尽量使用局部变量代替全局变量(这种叫做栈封闭),如果一定要使用全局变量,而又想让多个线程之间在访问共享变量的时候互不影响,那就使用ThreadLocal<T>。ThreadLocal<T>提供了一种方式,可以让线程在操作共享变量时,复制该共享变量的一个 阅读全文
posted @ 2016-04-29 09:20 duanxz 阅读(582) 评论(0) 推荐(0) 编辑
多线程设计模式(四):生产者-消费模式
摘要:生产者-消费模式,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责具体处理生产者提交的任务。两者之间通过共享内存缓冲去进行通信。 一、架构模式图: 类图: 生产者:提交用户请求,提取用户任务,并装入内存缓冲区; 消费者:在内存缓冲区中提取并处理任务; 阅读全文
posted @ 2016-01-19 19:34 duanxz 阅读(788) 评论(0) 推荐(0) 编辑
多线程设计模式(三):Master-Worker模式
摘要:Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。 一、什么是Mast 阅读全文
posted @ 2016-01-19 19:12 duanxz 阅读(825) 评论(0) 推荐(0) 编辑
多线程设计模式(二):Future模式
摘要:一、什么是Future模型: 该模型是将异步请求和代理模式联合的模型产物。类似商品订单模型。见下图: 客户端发送一个长时间的请求,服务端不需等待该数据处理完成便立即返回一个伪造的代理数据(相当于商品订单,不是商品本身),用户也无需等待,先去执行其他的若干操作后,再去调用服务器已经完成组装的真实数据。 阅读全文
posted @ 2016-01-19 19:08 duanxz 阅读(711) 评论(0) 推荐(1) 编辑
多线程设计模式(一):总体介绍
摘要:多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future、Master-Worker、Guard Susperionsion、不变、生产者-消费者 模式;jdk除了定义了若干并发的数据结构,也内置了多线程框架和各种线程池; 锁(分为内部锁、重入锁、读写锁)、ThreadLocal 阅读全文
posted @ 2016-01-19 17:07 duanxz 阅读(1035) 评论(0) 推荐(0) 编辑

1 2 3 下一页