目录
多线程原理分析(一)
一、包含的知识点
- 多线程带来的问题(好处、坏处)
- synchronized加锁方式
- 锁信息是如何存储的(Header、Mark Word)
- synchronized锁升级流程(偏向锁、轻量级锁、重量级锁)
二、多线程带来的问题
2.1 多线程带来的好处、坏处
- 能够充分利用多核CPU, 实现线程并行执行
- 多线程对于共享变量访问带来安全性问题
2.2 线程安全问题的本质
线程安全性本质,是对于数据状态的访问, 这个状态通常是共享的、可变的, 而问题的本质是对共享变量的访问
- 共享的, 指数据变量可以被多个线程访问
- 可变的, 指数据变量在生命周期内是可改变的
2.3 解决线程安全问题方式
- synchronized
三、Synchronized基本认识
3.1 synchronized 加锁方式
- 修饰实例方法, 对当前实例加锁,进入同步代码前要获得当前**实例的锁**
- 修饰代码块, 对当前类对象加锁,进入同步代码前要获得当前**类对象的锁**
- 修饰类方法, 指定加锁对象,对给定对象加锁,进入同步代码库前要获得**给定对象的锁**
这里以代码块加锁进行举例
public class SynchronizedThread {
private static int count = 0 ;
public static void main(String[] args) throws InterruptedException {
for (int i = 0 ; i < 2000; i++) {
new Thread(() -> incr()).start();
}
Thread.sleep(3000);
System.out.println("result -> " + count);
}
public static void incr() {
synchronized (SynchronizedThread.class) {
try {
Thread.sleep(1);
} catch (