两阶段终止模式|Java 并发编程设计模式两阶段终止模式什么是两阶段终止模式
核心:[实现正在运行的线程可以被其余线程优雅的终止]{.red}
细节:之前已经借助了中断方法实现了优雅的中断线程,现在将这种中断方式抽象成一种模式来实现
为什么要使用两阶段终止模式
情景:线程之间需要相互通信协作的时候,会出现某些线程想要终止其他线程的情况
方式:
stop() 方法
前提:[Stop 方法在 JDK 中已经内废弃了]{.gray} ...
Read more
线程安全-内存模型|Java 并发编程多线程基础内存模型概述:::info
注:这部分的主要目的用于梳理我自己对于内存模型的思路
:::
先来简单了解为什么需要内存模型?
[中断机制]{.red}
背景:[处理器同时只能够执行单个进程,效率非常低下]{.aqua}
解决方式:[中断机制避免单个进程长时间独占处理器的使用权]{.aqua}
产生的新问题:[中断机制导致进程间通信时对共享变量的修改结果不确定]{.aqua}
[缓存一致性问题] ...
Read more
线程安全-概述|Java 并发编程多线程基础什么是线程安全问题?概述:::primary
① 详细讲述线程安全之前先来简单感受下什么是线程安全问题
② 感受下出现线程安全问题的大致需要什么样的条件,因为我发现在没有样例的情况怎么写都是不好写的
:::
线程不安全示例:
[类提供对成员变量进行读写的方法,而多个线程同时调用类提供的该方法对成员变量递增 1000 次]{.aqua}
[最后得到结果会是我们预想的 2000 吗?还是会得到一 ...
Read more
线程同步-synchronized-优化策略|Java 并发编程多线程基础优化策略概述
前言:
[Java 线程采用的是内核级线程实现的]{.aqua}
[Synchronized 每次造成的线程阻塞都会让线程执行上下文切换,从而导致 OS 从用户态陷入内核态]{.aqua}
[OS 从用户态陷入内核态的开销是非常大的,为了避免因频繁的阻塞造成的上下文切换带来的开销]{.aqua}
[JDK 官方在 JDK 6 之后推出了相应的优化策略]{.aqua}
细节:下列所 ...
Read more
线程同步-synchronized-底层原理|Java 并发编程多线程基础Synchronized-底层原理:::primary
① Synchronized 等价于操作系统中的管程,所以首先理解操作系统中的管程是非常重要的
② Java 中提供的所有锁机制几乎都是基于管程的概念实现的
③ 想要知道 Synchronized 是如何实现管程的,需要了解以下的知识
参考笔记:
堆空间 - 对象创建
进程同步-信号量
:::
什么是管程?:::primary
先来了解下管程 ...
Read more
线程同步-synchronized-基础|Java 并发编程多线程基础Synchronized-基础基本概念:::primary
基本概念是对 synchronized 的所有内容的总结,如果发现存在难以理解的地方可以先查看后面的笔记
:::
[基本内容]{.label .info}
synchronized 定义:[采用的 悲观锁 的思想,是一种独占锁或者说排他锁]{.red}
synchronized 作用:[给共享变量添加排他锁从而确保 每次仅有一个线程 ...
Read more
线程同步-锁类型|Java 并发编程多线程基础锁类型:::primary
这里只会简单讲述每种锁的概念是什么,具体到锁的每种实现则会放到后面的部分再讲
:::
悲观锁和乐观锁
前言:悲观锁和乐观锁都是数据库并发控制中引入的概念,但并不仅限于数据库系统中使用
悲观锁
定义:
[每次对共享变量的修改过程持悲观态度,认为其他线程访问会 频繁写入 共享变量]{.pink}
[所以每次线程访问共享变量之前都会对其上锁,阻止其他线程访问 共享变量]{ ...
Read more