AQS
AQS是AbstractQueuedSynchronizer
的简称,即抽象的队列同步器
内容来源:
AQS是AbstractQueuedSynchronizer
的简称,即抽象的队列同步器
Thread.run()
similar to Thread.start()
What’s the difference?
Java 内存模型(Java Memory Model,JMM)定义了 Java 程序中的变量、线程如何和主存以及工作内存进行交互的规则
A concurrent application’s ability to execute in a timely manner is known as its liveness. This section describes the most common kind of liveness problem, deadlock, and goes on to briefly describe two other liveness problems, starvation and livelock.
Threads communicate primarily by sharing access to fields and the objects reference fields refer to. This form of communication is extremely efficient, but makes two kinds of errors possible: thread interference and memory consistency errors. The tool needed to prevent these errors is synchronization.
ThreadLocal 是Java中 lang 包下的一个类,是用来解决多线程下共享变量并发问题的,所谓共享变量即同一个变量在不同线程下赋予不同值, 而ThreadLocal会在不同线程中维护共享变量的独立副本
volatile 可以保证可见性,但不保证原子性: 当写一个 volatile 变量时,JMM 会把该线程在本地内存中的变量强制刷新到主内存中去; 这个写操作会导致其他线程中的 volatile 变量缓存无效。
池化技术的核心思想就是实现资源的复用,避免资源的重复创建和销毁带来的性能开销。
AQS 类的核心数据结构是一种名为 Craig, Landin, and Hagersten locks
(下称 CLH 锁)的变体。
实际项目中,一个接口可能需要同时获取多种不同的数据,然后再汇总返回,如果是串行(按顺序依次执行每个任务)执行的话,接口的响应速度会非常慢。考虑到这些任务之间有大部分都是 无前后顺序关联 的,可以 并行执行 ,就比如说调用获取商品详情的时候,可以同时调用获取物流信息。通过并行执行多个任务的方式,接口的响应速度会得到大幅优化。
JDK 中提供了一些并发编程中常用的通信工具类以供我们开发者使用。 它们都在 JUC 包下。先总体概括一下都有哪些工具类,它们有什么作用,然后再分别介绍它们的主要使用方法和原理。