并发设计
hxpjava1
毕业于武汉理工大学计算机系,12年开发架构经验,擅长java,k8s
展开
-
LinkedBlockingDeque工作密取
package com.java;import java.util.Random;import java.util.concurrent.LinkedBlockingDeque;public class SecretWorkFetch { private static class Work implements Runnable{ private static Object obj原创 2015-03-13 20:46:06 · 3605 阅读 · 3 评论 -
面试问题Executors有哪些创建线程池的方法
下面四个方法本质上都是调用ThreadPoolExecutor的构造方法:1:Executors.newSingleThreadExecutor()2:Executors.newFixedThreadPool(nThreads)3:Executors.newCachedThreadPool()4:Executors.newScheduledThreadPool(corePoolSi原创 2017-02-21 09:37:38 · 1473 阅读 · 0 评论 -
Condition-线程通信更高效的方式
Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这转载 2017-02-22 10:34:12 · 329 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁的使用
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人转载 2017-02-22 10:57:05 · 440 阅读 · 0 评论 -
Disruptor
已经不记得最早接触到 Disruptor 是什么时候了,只记得发现它的时候它是以具有闪电般的速度被介绍的。于是在脑子里, Disruptor 和“闪电”一词关联了起来,然而却一直没有时间去探究一下。 最近正在进行一项对性能有很高要求的产品项目的研究,自然想起了闪电般的 Disruptor ,这必有它的用武之地,于是进行了一番探查,将成果和体会记录在案。一、什么是 Disr转载 2017-02-23 10:20:32 · 586 阅读 · 0 评论 -
Lock与synchronized 的区别
一、synchronized和lock的用法区别 (1)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。 (2)lock(显示锁):需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对 象才能保证转载 2017-02-15 10:47:30 · 738 阅读 · 0 评论 -
聊聊并发(一)——深入分析Volatile的实现原理
引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通转载 2017-04-12 11:28:42 · 384 阅读 · 0 评论 -
Java 理论与实践: 正确使用 Volatile 变量
转载于:http://www.ibm.com/developerworks/cn/Java/j-jtp06197.htmlJava 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部转载 2017-04-19 18:40:26 · 289 阅读 · 0 评论 -
ConcurrentHashMap原理详解
下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开转载 2017-04-23 17:50:09 · 326 阅读 · 0 评论 -
hashtable、hashmap、ConcurrentHashMap、treemap的区别
转自:http://blog.csdn.net/xin_jmail/article/details/24431835自己对hashtable、hashmap、treemap的理解,不知道是否有不对的地方。HashTable: (1)是一个包含单向链的二维数组,table数组中是Entry存储,entry对象; (2)放入的value不能为空;转载 2017-04-23 18:21:31 · 500 阅读 · 0 评论 -
AtomicLong.lazySet是如何工作的?
Jackson Davis说:为一个AtomicLong对象设置一个值,jvm会确保其他线程读取到最新值,原子类和voliatile变量也是一样的,这是由依赖于硬件的系统指令(如x86的xchg)实现的。lazySet却是无法保证这一点的方法,所以其他线程在之后的一小段时间里还是可以读到旧的值。这有什么好处呢?性能:在多核处理器下,内存以及cpu缓存的读和写常常是顺序执行的,所以在转载 2017-04-23 21:12:22 · 568 阅读 · 0 评论 -
volatile的适用场景(面试问题:volatile有什么作用)
把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突。可见性则更为微妙,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的。 —— 如果转载 2017-02-15 09:37:31 · 13807 阅读 · 0 评论 -
sleep和wait有什么区别(面试问题:sleep和wait有哪些区别)
第一种解释:功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.第二种解释:sleep是Thread类转载 2017-02-15 10:49:57 · 2343 阅读 · 0 评论 -
JVM中线程的状态转换图(面试问题:java线程有哪些状态)
JVM中线程的状态转换图线程在一定条件下,状态会发生变化。线程一共有以下几种状态:1、新建状态(New):新创建了一个线程对象。2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。3、运行状转载 2017-02-16 13:47:15 · 2963 阅读 · 0 评论 -
一个简单的线程池实现
public class ThreadPool { private AtomicInteger maxSize; private BlockingQueue taskQueue; private List threads=null; private static ThreadPool instance =null; private static Lock lock=new Reent原创 2017-01-26 16:48:13 · 365 阅读 · 0 评论 -
一个简单的分段锁hashmap
public class MyConcurrentHashMap { private HashMap map=new HashMap(); private Object[] locks=null; private int lockSize; public MyConcurrentHashMap(int lockSize){ this.lockSize=lockSize; l原创 2017-01-26 16:45:23 · 887 阅读 · 0 评论 -
基于zookeeper的分布式lock实现
背景 继续上一篇文章:http://agapple.iteye.com/blog/1183972 ,项目中需要对分布式任务进行调度,那对应的分布式lock实现在所难免。 这一周,在基于BooleanMutex的基础上,实现了zookeeper的分布式锁,用于控制多进程+多线程的lock控制 算法可以预先看一下zookeeper的官方文档:转载 2014-03-18 19:58:50 · 4416 阅读 · 0 评论 -
CyclicBarrier 源码阅读
package java.util.concurrent;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * A synchronization aid that allows a set of threads to all wait for原创 2017-01-11 13:54:49 · 323 阅读 · 0 评论 -
python使用condition实现一个简易的栅栏,CyclicBarriar
'''Created on 2017-1-11@author: admin'''from threading import Condition, Threadclass CyclicBarriar(): def __init__(self,job,count): self.condition=Condition() self.job=job;原创 2017-01-11 14:42:45 · 760 阅读 · 0 评论 -
实现一个简易的Python版CountDownLatch
'''Created on 2017-1-11@author: admin'''from threading import Condition, Threadimport timeclass CountDownLatch: def __init__(self,count): self.count=count self.condition=Co原创 2017-01-11 15:43:31 · 1727 阅读 · 0 评论 -
ConcurrentLinkedQueue原理(上)
ConcurrentLinkedQueue是Queue的一个线程安全实现。它是一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQue转载 2017-02-19 12:29:55 · 495 阅读 · 0 评论 -
Java锁的种类以及辨析
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。1、自旋锁2、自旋锁的其他种类3、阻塞锁4、可重入锁5、读写锁6、互斥锁7、悲观锁转载 2017-02-19 18:32:24 · 596 阅读 · 0 评论 -
Java集合---ConcurrentHashMap原理分析(面试问题:ConcurrentHashMap实现原理是怎么样的)
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2017-02-18 19:22:21 · 7232 阅读 · 0 评论 -
系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下:一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间 QPS(TPS):每秒钟reque转载 2017-09-21 15:01:03 · 323 阅读 · 0 评论