内部原理 JVM 中试图定义一种 JMM 来屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 JMM 的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储…
“死锁”四个必要条件的合理解释
《“死锁”四个必要条件的合理解释》分为三个部分: 【1】“死锁”的含义 【2】“死锁”的原因及四个必要条件的合理解释 【3】“死锁”的预防和解除 1.“死锁”的含义 所谓死锁: 是指两个或两个以上的进程在执行过程中,由于…
40个Java多线程面试题总结
前言 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案…
Java中15种锁的分类综合总结
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁…
线程安全的无锁RingBuffer的实现
在程序设计中,我们有时会遇到这样的情况,一个线程将数据写到一个buffer中,另外一个线程从中读数据。所以这里就有多线程竞争的问题。 通常的解决办法是对竞争资源加锁。但是,一般加锁的损耗较高。其实,对于这样的一个线程写,…
ReadWriteLock场景应用解析
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不…
线程的状态转换以及基本操作
1. 新建线程 一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程;(2)调用对象的f…
最全面的阿里多线程面试题,你能回答几个?
1、什么是进程,什么是线程,为什么需要多线程编程? 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位; 线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程…
死磕Synchronized底层实现--重量级锁
本文为死磕Synchronized底层实现第三篇文章,内容为重量级锁实现。 本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁、轻量级锁、重量级锁的加锁、解锁、锁升级流程的原理及源码…
死磕Synchronized底层实现--轻量级锁
本文为死磕Synchronized底层实现第三篇文章,内容为轻量级锁实现。 轻量级锁并不复杂,其中很多内容在偏向锁一文中已提及过,与本文内容会有部分重叠。 另外轻量级锁的背景和基本流程在概论中已有讲解。强烈建议在看过两篇…