目录
1、synchronized 锁的执行顺序:
synchronized同步锁(对象级别,一个对象一把锁)
static synchronized静态同步锁(类级别,一个类一把锁)
- 当一个线程访问的都是同步锁时,(一个线程即一个对象,所以只有一把对象锁)是按顺序执行的
- 当一个线程访问的都是静态同步锁(一个线程即一个类,所以只有一把类锁)是按顺序执行的
- 当一个线程访问有静态同步锁也有同步锁时,两把锁,之间互不干扰。
- 当多线程访问的都是同步锁时,多线程 多对象 多把对象锁,之间互不干扰。
- 当多线程访问的都是静态同步锁时,多线程属于同个类,只有一把类锁,所以按顺序执行。
- 当多线程访问有静态同步锁也有同步锁时,同步锁间互不干扰,静态同步锁按顺序执行。
总结:
一个线程就一个对象,一个类;只能有一把同步锁,一把静态同步锁
多线程即多个对象,同个类;可以有多把同步锁,但只能有一把静态同步锁。
2、公平锁和非公平锁
公平锁:效率相对低 ,但是cpu 的利用高了
非公平锁:效率高,但是线程容易饿死(所有的工作,有一个线程完成)
用法: 在创建可重入锁时,想构造器中传入true
private final ReentrantLock lock = new ReentrantLock(true);