随笔分类 -  concurrent

更快的原子类:LongAdder
摘要:LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情况下,代替AtomicLong/AtomicInt,成为一个用于高并发情况下的高效的通用计数器。 高并发下计数,一般最先想到的应该是AtomicLong/AtomicInt,AtmoicXXX使用硬件级别的指令 CAS 来更 阅读全文
posted @ 2018-02-02 17:53 一个帅哥9527 阅读(179) 评论(0) 推荐(0)
并行流水线、搜索、排序
摘要:并行流水线:利用每一个流水线都有一个LickedBlockingQueue参数,将结果传递给下一个流水线 1、this.bq.take();2、经过计算;3、next.bq.add("中介");bq=每个流水线(实体类)的LickedVlockingQueue 并行搜索:利用1、数组分段,Atomi 阅读全文
posted @ 2017-12-27 15:42 一个帅哥9527 阅读(240) 评论(0) 推荐(0)
JDK中的Future模式
摘要:RealDataJDK类: Application 阅读全文
posted @ 2017-12-27 13:34 一个帅哥9527 阅读(439) 评论(0) 推荐(0)
Disruptor
摘要:、什么是 Disruptor 从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。 可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么。 我们知道 Block 阅读全文
posted @ 2017-12-25 11:29 一个帅哥9527 阅读(278) 评论(0) 推荐(0)
Unsafe类 AtomicReference AtomicStampedReference AtomicIntegerArray AtomicIntegerFieldUpdater vector SynchronousQueue
摘要:Java中的指针:Unsafe类 无锁的对象引用:AtomicReference 带有时间戳的对象引用:AtomicStampedReference 数组也能无锁:AtomicIntegerArray 让普通的变量也享受CAS操作带来的线程安全性 AtomicIntegerFieldUpdater 阅读全文
posted @ 2017-12-12 15:50 一个帅哥9527 阅读(132) 评论(0) 推荐(0)
java 虚拟机对锁对优化
摘要:Java对象头(不用记内容,只需要知道,对象头里面,会保存一些信息) 锁存在Java对象头里。如果对象是数组类型,则虚拟机用3个Word(字宽)存储对象头,如果对象是非数组类型,则用2字宽存储对象头。在32位虚拟机中,一字宽等于四字节,即32bit。(下面这个表格讲的很清楚) 长度 内容 说明 32 阅读全文
posted @ 2017-12-11 11:45 一个帅哥9527 阅读(278) 评论(1) 推荐(1)
java 提高锁性能 方法
摘要:1、减少锁持有时间:(根据有效的条件去减少锁住的代码) 2、减少锁的颗粒度(将大面积分成小面积) ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色, 阅读全文
posted @ 2017-12-08 18:12 一个帅哥9527 阅读(316) 评论(0) 推荐(0)
ConcurrentLinkedQueue offer() 内部方法实现
摘要:// 注意:不同的颜色,表示不同的逻辑,前面的数字,是他们各自的逻辑顺序, //这个方法没有任何的锁操作,线程安全完全是由cas操作和队列的算法来保证的,整个方法的核心是for循环,这个循环没有出口,知道尝试成功 public boolean offer(E e) { checkNotNull(e) 阅读全文
posted @ 2017-12-08 14:55 一个帅哥9527 阅读(1118) 评论(0) 推荐(0)
Concurrent并发工具集合简介
摘要:ConcurrentHashMap: 一个高并发的HashMap CopyOnWriteArrayList : 这是一个list和ArrayList是 一族,在读多写少的场合,这个list性能非常好 (当写入当时候,先对数组进行了次复制,Arrays.copyof(oldArr,len+1),然后s 阅读全文
posted @ 2017-12-08 13:44 一个帅哥9527 阅读(335) 评论(0) 推荐(0)
线程池的扩展 beforeExecute() afterExecute() terminaerd()
摘要:TheadPoolExector.Worker是EhreadPoolExecutor的内部类,它是一个实现了Runnable接口的类 beforeExecute() 线程执行之前调用 afterExecute() 线程执行之后调用 terminaerd() 线程池退出时候调用 阅读全文
posted @ 2017-12-08 11:14 一个帅哥9527 阅读(2588) 评论(0) 推荐(0)
信号量semaphore 读写锁ReadWriteLock 倒计时器CountDownLatch 循环栅栏 CyclicBarrier 线程阻塞工具类LockSupport
摘要:信号量semaphore 允许多个线程同时访问 读写锁ReadWriteLock 在频繁的读写耗时中,读之间不阻塞 倒计时器CountDownLatch obj = new CountDownLatch(10) 设置预“任务”10次,obj.CountDown();次数减一 obj.await()等 阅读全文
posted @ 2017-12-07 20:29 一个帅哥9527 阅读(269) 评论(0) 推荐(0)
ReenTrantLock可重入锁 和synchronized 内部所锁的
摘要:基于AQS的锁(比如ReentrantLock)原理大体是这样:有一个state变量,初始值为0,假设当前线程为A,每当A获取一次锁,status++. 释放一次,status--.锁会记录当前持有的线程。当A线程拥有锁的时候,status>0. B线程尝试获取锁的时候会对这个status有一个CA 阅读全文
posted @ 2017-12-07 17:32 一个帅哥9527 阅读(168) 评论(0) 推荐(0)
守护线程
摘要:将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点: (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你 阅读全文
posted @ 2017-12-07 16:19 一个帅哥9527 阅读(154) 评论(0) 推荐(0)
notify wait sleep join yield yield
摘要:notify 和 wait,他们的操作必须有一个公共的锁对象(就相当于下拉框option 的分组一样) notify通知之后,也要等到当前线程运行完成,才会释放锁,wait线程才能开始拿到锁,执行(wait()方法之后的)程序 Object.wait() Object.nitify() Thread 阅读全文
posted @ 2017-12-07 15:52 一个帅哥9527 阅读(127) 评论(0) 推荐(0)
Thread.stop()不要随意调用
摘要:如题:Thread.stop()不要随意调用 ,因为这样会强制中断线程,如果当时线程存数据未终结的时候,stop,会出现脏数据的情况, 如果想要中断,请用变量的形式进行判断 还可以用中断符号表示: public static boolean Thread.interrupted() //判断是否被中 阅读全文
posted @ 2017-12-07 11:45 一个帅哥9527 阅读(648) 评论(0) 推荐(0)
Condition 与 Object 在通信上的对比
摘要:Condition 将 Object的通信方法(wait、notify 和 notifyAll)分解成截然不同的对象,用await()替换wait(),用signal()替换notify(),用signalAll()替换notifyAll(),传统线程的通信方式,Condition都可以实现,这里注 阅读全文
posted @ 2017-10-30 11:35 一个帅哥9527 阅读(748) 评论(0) 推荐(1)
AtomicI 多线程中的原子操作
摘要:原子类的工具类包含下面: 常涉及到的方法:compareAndSet(); 先对比,后赋值, 举例 AtomicInteger : 内部实现: 是使用volatile作为关键字实现的 阅读全文
posted @ 2017-10-19 16:38 一个帅哥9527 阅读(307) 评论(0) 推荐(0)
ThreadLocal<T>
摘要:图解: 说明:在我们Thread 的类里面,存在一个属性,这个属性是:ThreadLocal类实现的内部类(ThreadLocalMap),所以对于每一个线程来说,他都具有一个本地的map,保存属于自己的参数, 对于回收,ThreadLocalMap的实现使用了弱引用, 另外注意使用规范: Thea 阅读全文
posted @ 2017-10-19 15:15 一个帅哥9527 阅读(190) 评论(0) 推荐(0)
volatile,synchronized,区别
摘要:1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。 2.volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的 3.vo 阅读全文
posted @ 2017-10-18 17:17 一个帅哥9527 阅读(173) 评论(0) 推荐(0)