Java并发
文章平均质量分 69
小森、
这个作者很懒,什么都没留下…
展开
-
Java并发(四)---无锁
目录一、CAS & volatile二、原子整数二、原子引用1.ABA问题2.AtomicStampedReference3.AtomicMarkableReference三、原子数组四、字段更新器五、原子累加器1.伪共享2.LongAdder源码add方法longAccumulate方法sum方法六、Unsafe1.Unsafe CAS操作一、CAS & volatileJUC提供的多个类,类中的方法内部并没有用锁来保护共享变量的线程安全。而是采用了CAS(compareAndSet原创 2021-02-24 16:46:18 · 509 阅读 · 0 评论 -
Java并发(三)---内存
目录一、Java 内存模型二、原子性二、可见性1.volatile2.CPU缓存结构一、Java 内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有序性 - 保证指令不会受 cpu 指令并行优化的影响二、原子性Java并发(二)—Monitor二、可见性1.vo原创 2021-02-23 12:54:38 · 434 阅读 · 0 评论 -
多线程设计模式之犹豫模式
目录一、简述二、实现一、简述Balking (犹豫)模式用在一个线程发现另一个线程或本线程已经做了某一件相同的事,那么本线程就无需再做了,直接结束返回。二、实现@Slf4j(topic = "c.MonitorService")class MonitorService { // 用来表示是否已经有线程已经在执行启动 private volatile boolean starting; public void start() { log.info("尝试启动监原创 2021-02-23 11:24:43 · 126 阅读 · 1 评论 -
Java并发(一)---Java线程
目录一、创建和运行线程1.使用Thread创建使用Runnable配合Thread3.FutureTask 配合 Thread二、线程运行原理1.栈与栈帧2.上下文切换三、常用方法1.start() & run()2.sleep() & yield()3.join()4.interrupt()四、主线程和守护线程一、创建和运行线程1.使用Thread创建// 创建线程对象Thread t = new Thread() { public void run() { // 要执行的任原创 2021-02-22 16:36:55 · 83 阅读 · 1 评论 -
Java并发(二)---Monitor
目录一、共享数据带来的问题二、synchronized使用1.基本使用2.synchronized的位置三、变量的线程安全分析一、共享数据带来的问题@Slf4j(topic = "c.Test1")public class Test1 { static int counter = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread((原创 2021-02-22 16:35:30 · 531 阅读 · 2 评论 -
多线程设计模式之生产者/消费者模式
目录一、简述二、实现一、简述异步模式之生产者/消费者:不需要产生结果和消费结果的线程一一对应消费队列可以用来平衡生产和消费的线程资源生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据JDK 中各种阻塞队列,采用的就是这种模式二、实现//Messageclass Message { private int id; private Object message; public M原创 2021-02-22 14:57:59 · 411 阅读 · 0 评论 -
多线程设计模式之保护性暂停
目录一、简介二、实现三、带超时版实现一、简介同步模式之保护性暂停,即 Guarded Suspension,用在一个线程等待另一个线程的执行结果。有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject如果有结果不断从一个线程到另一个线程那么可以使用消息队列JDK 中,join 的实现、Future 的实现,采用的就是此模式因为要等待另一方的结果,因此归类到同步模式二、实现class GuardedObject { private Object re原创 2021-02-22 12:54:28 · 138 阅读 · 0 评论 -
多线程设计模式之两阶段终止模式
目录一、简述二、用两阶段终止模式终止监控操作1.利用 interrupted2.利用停止标记一、简述Two Phase Termination:简单来说就是将终止过程分成两个阶段,其中第一个阶段主要是线程 T1 向线程 T2发送终止指令,而第二阶段则是线程 T2响应终止指令(在这之前先进行处理操作。例如:释放锁,释放资源等)。而不是使用线程对象的 stop() 方法强制停止线程。二、用两阶段终止模式终止监控操作实际工作中,需要有监控系统(监控线程)动态的检测被监控系统。监控系统发送采集指令从被监控系原创 2021-02-21 11:37:16 · 331 阅读 · 0 评论