学习地址:狂神Bilibili个人主页 1.什么是自学锁? 是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 2.使用场景 就像…
分类:JUC
volatile禁止指令重排理解和例子说明
计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排,一般分一下3种: 源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行的指令 单线程环境里…
Java并发编程的艺术 -- 线程池和Executor框架(第九、十章)
文章目录 1、线程池 1.1、为什么使用线程池? 1.2、线程池的实现原理 1.3、excute()方法源码分析 1.4、工作线程 1.5、线程池的创建 1.6、execute()和submit()方法 1.7、关闭线程…
Java 中的活锁,死锁,饥饿有什么区别?
死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一 种互相等待的现象,若无外力作用,它们都将无法推进下去,此时称系统处于 死锁状态或系统产生了死锁。 饥饿:考虑一台打印机分配的例子,当有多个进程需要打印文件…
详解volatile关键字和原子引用
本篇看一下Volatile关键字和原子引用。 详解volatile关键字和原子引用 上图就是JUC包结构,总共分成三块 (1)java.util.concurrent:并发包基础类,包括阻塞队列,线程池相关类,线程安全M…
序列化和反序列化总结
简介 对象的序列化 如上图,我们把一个Person对象以流的方式,写入到文件中保存,叫写对象,也叫对象序列化,对象中包含的不仅仅是字符,使用字节流。 ObjectOutputStream:对象的序列化流 对象序列化的最主…
Java提高——JUC线程实现Callable接口和Lock锁
实现Callable接口(实现线程的第三种方式) Java 5.0 在java.util.concurrent提供了一个新的创建执行线程的方式:Callable接口 Callable接口类似于Runnable,两者都是为…
JUC学习之生产者消费者案例-Lock-Condition线程通信
本文是看视频学习笔记,若有错误请指正! 生产者消费者案例的lock写法 其中涉及到了Condition的用法,简答的介绍一下: 1.Condition接口描述了可能会与锁相关的条件变量,这些变量在用法上与使用Object…
JUC源码分析-JUC锁(六):StampedLock
1. 概述 StampedLock是JDK 8新增的读写锁,跟其他同步锁不同,它并不是由AQS实现的。它是一个基于能力(capability-based)的锁,提供了三种模式来控制 read/write 的获取,并且内部…
《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式,Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例,
上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可。那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Hashtable,此外还…