线程锁相关,锁消除,锁相关

时间:2020-07-22 11:25:38   收藏:0   阅读:64

线程锁

  1. 自旋锁:为了不放弃CPU执行事件,循环的使用CAS技术对数据尝试进行更新,直到成功。
  2. 悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从数据就开始上锁。
  3. 乐观锁:假定没有冲突,在修改数据时如果数据发现和之前获取的不一致,则读最新数据,修改后重新修改。
  4. 独享锁(写):给资源加上写锁,线程可以修改资源,其他线程不能再锁;(单写)。
  5. 共享锁(读):给资源加上读锁只能读不能改,其他线程也只能加读锁,不能加写锁;(多读)。 
  6. 可重入锁、不可重入锁:线程拿到一把锁之后,可以自由进入同一把锁同步的其他代码。
  7. 公平锁、非公平锁:争抢锁的顺序,如果是按先来后到,则为公平。
  8. 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);
    }
}

 

 

 

 

 

 

 

 

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!