美文网首页
java-synchronized 理解

java-synchronized 理解

作者: hello_world_cxm | 来源:发表于2021-03-04 23:04 被阅读0次
    //synchronized (mylist){   //synchronized 实际教监视器 中译叫锁,意思是线程进入这个空间,就必须执行完空间内的代码块才能release
                        mylist.add("D");
                    //}
    

    同步代码块里面是原子操作,synchronized保护原子操作防止被打断,o代表是当前对象,synchronized就是对当前对象加锁,那么其他对象就无法访问该同步代码块。当o对象执行完同步代码块之后,就会将这个锁标记释放出来,然后os从就绪的线程中挑选一个线程,并且尝试获取锁标记从而进入代码块,执行原子操作。

    所以synchronized虽然提供了线程安全,但是牺牲了并发效率,千军万马过独木桥。想StringBuffer 就是线程安全 StringBuilder就是线程不安全。其实所谓线程安全就是类中的方法被synchronized修饰,从而变成了线程安全。
    ----------------------------------------------------------死锁---------------------------------
    前提:一个线程可以获取多个锁标记,那么一个线程如何获得多个锁标记呢?嵌套,

    一个线程可以拿到多个对象的锁标记,每个对象都有自己的锁标记。每个对象就好比每个公用电话亭,每个电话亭门前都挂有一把锁,线程就是打电话的人,监视器就是检查打电话的人,有没有拿到当前对象的锁,只有拿到这个电话亭的锁,人才可以进去完成打电话操作。且每个线程是可以拿多个电话亭的锁,但是每个电话亭的锁每次只能给一个人用,也就是一个线程用,这就是同步代码块嵌套,就是电话停又包含一个电话亭,要想打电话,就必须拿到两个电话亭的锁标记。

    Synchronized(o){
    o.wait() //o对象会失去cpu以及锁标记
    }

    相关文章

      网友评论

          本文标题:java-synchronized 理解

          本文链接:https://www.haomeiwen.com/subject/dcvhqltx.html