多线程
涨知识的coder
这个作者很懒,什么都没留下…
展开
-
Java并发volatile关键字
在并发编程中,我们通常会遇到以下三个问题原子性,可见性,有序性volatile 的特性保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。(实现可见性) 禁止进行指令重排序。(实现有序性) volatile 只能保证对单次读/写的原子性。i++ 这种操作不能保证原子性。可见性分析缓存一致性(MESI协议)内存...原创 2020-04-07 13:46:34 · 129 阅读 · 0 评论 -
synchronized底层实现原理
java对象头MonitorHotSpot虚拟机中对象在内存中的布局对象头(1)Mark Word实例数据 对齐填充http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/095e60e7fc8c/src/share/vm/runtime/objectMonitor.hpp ObjectMonitor() ...原创 2020-04-05 15:51:14 · 371 阅读 · 0 评论 -
Java线程的6种状态详解
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }1.新建(NEW):新创建了一个线程对象。2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调...原创 2020-04-05 12:42:31 · 231 阅读 · 0 评论 -
sleep与wait、notify和区别
基本的差别:sleep是Thread类的方法,wait是Object类的定义的方法sleep方法可以在任何地方使用wait方法只能在synchronized方法或 synchronized块中使用最主要的本质区别thread.sleep只会让出cpu不会导致锁行为的改变object.wait不仅让出cpu,还会释放已经占有的同步资源锁notify和notifyal...原创 2020-04-04 20:34:30 · 1102 阅读 · 0 评论 -
java并发2
7.x JDK多任务执行框架8.x Concurrent.util工具类详细讲解和使用 CyclicBarrier使用: 假设有只有一个场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没准备好,大家都等待。示例: CountDownLacth使用: 他经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作。public class UseCountD原创 2017-04-07 17:26:28 · 334 阅读 · 0 评论 -
Future模式 多线程设计模式
Future模式有点类似于商品订单。客户端Future取到一个FutureData包装类,可能数据是不立即使用,FutureData包装类自己偷偷的去加载真实数据。客户端Future再取到真实数据。public class Main { public static void main(String[] args) { FutureClient fc = new FutureC原创 2017-03-13 17:52:02 · 498 阅读 · 0 评论 -
自定义线程池Executors
在使用有界队列时,若有新的任务需要执行,如果线程池实际线程数小于corePoolSize,则优先创建线程,若大于corePoolSize,则会将任务加入队列,若队列已满,则在总线程数不大于maximumPoolSize的前提下,创建新的线程,若线程数大于maxmumPoolSize,则执行拒绝策略。或其他自定义方式。无界的任务队列时:LinkedBlockingQueue.与有界队列相比,除非系统资原创 2017-03-23 14:42:33 · 681 阅读 · 0 评论 -
Master-Worker模式 多线程设计模式
Master-Worker模式 多线程设计模式 常用的并行计算模式。它的核心思想是系统由两类进程协作工作:Master-Worker进程。Master负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后,会将结果返回给Master,由master做归纳和总结。大任务分解小任务,并行执行。 public class Main { public static vo原创 2017-03-14 17:17:04 · 712 阅读 · 0 评论 -
Disruptor多线程并发构架
Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。Disruptor它是一个开源的并发框架,并获得20原创 2017-05-26 15:09:51 · 5560 阅读 · 1 评论