一江溪水
什么是自旋锁 什么是自旋锁
前言阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间。如果同步代码块中的内容过于简单,状态转换消耗的时间有可能比用户代码执行的时间还要长。 自旋锁在有些场景中,同步资源的锁定时间很短,为了这一小段时
2021-12-30
悲观锁VS乐观锁 悲观锁VS乐观锁
前言Java中有很多锁,每种锁因其特性的不同,在适当的场景下的效率也有很大的差别。今天我们对比一下乐观锁和悲观锁,看看他们有什么不同和相同。 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有比较广泛的
2021-12-27
JDK锁升级过程 JDK锁升级过程
synchronizedJava对象头synchronized是悲观锁,在操作同步资源之前需要给同步资源先加锁,这把锁就是存在Java对象头里的,对象头主要包括两部分数据: Mark Word(标记字段) Klass Pointer(类型
2021-12-26
生产者-消费者模型 生产者-消费者模型
什么是生产者消费者模型生产者 - 消费者模型( Producer-consumer problem) 是一个非常经典的多线程并发协作的模型,在分布式系统里非常常见。 这个模型由两类线程和一个缓冲区组成来组成 生产者线程:生产数据,并把数据
2021-11-20
BIO、NIO、AIO的区别 BIO、NIO、AIO的区别
同步与异步同步和异步指的是一个执行流程中每个方法是否必须依赖前一个方法完成后才可以继续执行。假设我们现在有两个方法:方法一和方法二。 同步指的是调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。即方法二一定要等到方法一执行完
2021-11-18
Java的IO流 Java的IO流
基本概念同步和异步同步和异步是通信机制 同步:同步IO是用户线程发起IO请求后需要等待或轮询内核IO操作完成后才能继续执行。 异步:异步IO是用户线程发起IO请求后可以继续执行,当内核IO操作完成后会通知用户线程,或调用用户线程注册的回调
2021-10-03
AQS原理 AQS原理
概念AQS是AbstarctQueuedSynchronizer 的简称 ,是一个用于构建锁和同步容器的框架。 juc并发 包内许多类都是基于 AQS 构建的 ReentrantLock ReentrantReadWriteLock Fu
2021-09-22
比较交换CAS 比较交换CAS
概念CAS 是比较交换 CompareAndSwap 的简称,是一种用于在多线程环境下实现同步功能的机制。 顾名思义就是比较并交换。简单来说,从某一内存上取值 V,和预期值 A 进行比较 如果内存值 V 和预期值 A 的结果相等,那么我们
2021-09-21
volatile 关键字 volatile 关键字
volatile 关键字 volatile 关键字解决内存可见性问题,是一种弱形式的同步。 该关键字可以确保当一个线程更新共享变量时,更新操作对其他线程马上可见。 当一个变量被声明为 volatile 时,线程在写入变量时不会把值缓存在寄存
2021-09-19
JDK的锁优化策略 JDK的锁优化策略
锁的优化策略 JDK6对synchronized做了很多优化,引入了自适应自旋、锁消除、锁粗化、偏向锁和轻量级锁等优化策略,提高锁的效率; 锁一共有4个状态,级别从低到高依次是:无锁、偏向锁、轻量级锁和重量级锁,状态会随竞争情况升级。 锁可
2021-09-19
synchronized关键字 synchronized关键字
概念synchronized 同步块是 Java 提供的一种原子性内置锁,Java 中的每个对象都可以把它当作一个同步锁来使用,这些 Java 内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。 内置锁 也叫排它锁,也就是当一个线程获取这
2021-09-17
扩展线程池捕获线程异常 扩展线程池捕获线程异常
如何捕获线程池中的线程异常简单案例我们先看一个案例,实现Runnable接口,计算两个数的商创建一个线程池,参数如下提交任务到线程池,查看执行结果执行结果 我们发现,我们代码中,提交了5个线程,但最终只打印了4个结果, 而且没有报何错误,
2021-09-15
1 / 2