线程锁相关,锁消除,锁相关
线程锁
- 自旋锁:为了不放弃CPU执行事件,循环的使用CAS技术对数据尝试进行更新,直到成功。
- 悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从数据就开始上锁。
- 乐观锁:假定没有冲突,在修改数据时如果数据发现和之前获取的不一致,则读最新数据,修改后重新修改。
- 独享锁(写):给资源加上写锁,线程可以修改资源,其他线程不能再锁;(单写)。
- 共享锁(读):给资源加上读锁只能读不能改,其他线程也只能加读锁,不能加写锁;(多读)。
- 可重入锁、不可重入锁:线程拿到一把锁之后,可以自由进入同一把锁同步的其他代码。
- 公平锁、非公平锁:争抢锁的顺序,如果是按先来后到,则为公平。
- synchronized同步锁
可重入锁
线程拿到一把锁之后,可以自由进入同一把锁同步的其他代码。
// 可重入 public class ObjectSyncDemo2 { public synchronized void test1(Object arg) { System.out.println(Thread.currentThread() + " 我开始执行 " + arg); if (arg == null) { test1(new Object());//这里再调用方法,使用同步锁 } System.out.println(Thread.currentThread() + " 我执行结束" + arg); } public static void main(String[] args) throws InterruptedException { new ObjectSyncDemo2().test1(null); } }