搞懂多线程(十)之AQS


搞懂多线程(十)之AQS 一、概念 AbstractQueuedSynchronizer是一个抽象类,缩写AQS:是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的CLH(FIFO)队列的变种来完成资源获取线程的排队工作,将每条将要去抢占资源的线程封装成一个Node节点

搞懂多线程(九)之ThreadLocal


一、概述 ThreadLocal提供线程局部变量。这些变量与正常的变量不同,因为每一个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。 解决的是在当前线程中,有属于自己的变量,可以存储数据,例如可以使用ThreadLocal存储当前登录用户的信

搞懂多线程(八)之原子操作类


搞懂多线程(八)之原子操作类 一、概述 二、基本类型原子类 1、AtomicInteger 概念 可以原子方式更新的int值 构造方法

搞懂多线程(七)之CAS


搞懂多线程(七)之CAS 一、概念 CAS(compare and swap):中文翻译成比较并交换,实现并发算法时常用到的一种技术。 它包含三个操作数:内存位置、预期原值及更新值。 执行CAS操作的时候,将内存位置的值与预期原值比较: 如果相匹配,那么处理器会自动将该位置值更新为新值 如果不匹配,

搞懂多线程(六)之volatile关键字


搞懂多线程(六)之volatile关键字 一、特性 1.保证可见性 对一个被volatile关键字修改的变量 写操作的话,这个变量的最新值会立即刷新回到主内存中 读操作的话,总是能够读取到这个变量的最新值,也就是这个变量最后被修改的值 当某个线程收到通知,去读取volatile修饰的变量的值的时候,

搞懂多线程(五)之线程中断、等待、唤醒


搞懂多线程(五)之线程中断、等待、唤醒 一、线程中断 方式一:volatile关键字 通过volatile关键字的可见性修饰一个标识,要停止的线程监听该标识 方式二:AtomicBoolean原子类 通过AtomicBoolean原子布尔类,修饰一个标识,要停止的线程监听该标识 方式三:interr

搞懂多线程(四)之《锁》


搞懂多线程(四)之《锁》 一、乐观锁和悲观锁 乐观锁:认为自己在使用数据时不会有别的线程修改数据或资源,所以不会添加锁。 在Java中是通过使用无锁编程来实现,只是在更新数据的时候去判断,之前有没有别的线程更新了这个数据。 如果这个数据没有被更新,当前线程将自己修改的数据成功写入 如果这个数据已经被

搞懂多线程(三)之Future接口


搞懂多线程(三)之Future接口 一、概念 Future:是Java5新加的一个接口,它提供了一种异步并行计算的功能。如果主线程需要执行一个很耗时的计算任务,我们就可以通过future把这个任务放到异步线程中执行。主线程继续处理其他任务或者先行结束,再通过Future获取计算结果。 二、Futur

搞懂多线程(二)之创建多线程的方式


一、程序、进程、线程程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码。进程(process):程序的一次执行过程,或是

搞懂多线程(一)之基本概念


搞懂多线程(一)之基本概念 一、程序、进程、线程 程序(program):为完成特定任务,用某种语言编写的`一组指令的集合`。即指一段静态的代码。 进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。程序是静态的,进程是动态的。进程作为操作系统调度和分配资源的最小单位。 线程(