为什么使用volatile?在某些情况下,volatile同步机制的性能要优于锁(synchronized关键字),但是由于虚拟机对锁实行的许多消除和优化,所以并不是很快 。
volatile变量读操作的性能消耗与普通变量几乎没有差别,但是写操作则可能慢一些,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行 。
并发与线程并发与线程的关系?并发不一定要依赖多线程,PHP中有多进程并发 。但是Java里面的并发是多线程的 。
什么是线程?线程是比进程更轻量级的调度执行单位 。线程可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O),又可以独立调度(线程是CPU调度的最基本单位) 。
实现线程有哪些方式?
- 使用内核线程实现
- 使用用户线程实现
- 使用用户线程+轻量级进程混合实现
Java线程调度什么是线程调度?线程调度是系统为线程分配处理器使用权的过程 。
线程调度有哪些方法?
- 协同式线程调度:实现简单,没有线程同步的问题 。但是线程执行时间不可控,容易系统崩溃 。
- 抢占式线程调度:每个线程由系统来分配执行时间,不会有线程导致整个进程阻塞的问题 。
但是并不能完全依靠线程优先级 。因为Java的线程是被映射到系统的原生线程上,所以线程调度最终还是由操作系统说了算 。如Windows中只有7种优先级,所以Java不得不出现几个优先级相同的情况 。同时优先级可能会被系统自行改变 。Windows系统中存在一个“优先级推进器”,当系统发现一个线程执行特别勤奋,可能会越过线程优先级为它分配执行时间 。
线程安全的定义?当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的 。
Java语言操作的共享数据,包括哪些?
- 不可变
- 绝对线程安全
- 相对线程安全
- 线程兼容
- 线程对立
如何实现线程安全?虚拟机提供了同步和锁机制 。
- 阻塞同步(互斥同步)
- 非阻塞同步
经验总结扩展阅读
- JVM学习笔记——类加载和字节码技术篇
- 详解pyautogui模块
- 2022-11-4 VideoPipe可视化视频结构化框架新增功能详解
- 详细了解JVM运行时内存
- 【JVM】关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列
- Istio Ambient Mesh七层服务治理图文详解
- JVM学习笔记——垃圾回收篇
- 详解AQS中的condition源码原理
- JVM学习笔记——内存结构篇
- FHQ Treap 详解