美文网首页
1.17 如果锁对象的属性或锁本身引用发生改变, 锁的使用会受影

1.17 如果锁对象的属性或锁本身引用发生改变, 锁的使用会受影

作者: 殊胜因缘_Chris | 来源:发表于2019-03-16 11:38 被阅读0次
/**
 * This is description.
 * 1. 如果锁对象的属性发生改变, 锁的使用会受影响吗?
 * 2. 如果锁对象的引用发生改变, 锁的使用会受影响吗?
 *
 * @author Chris Lee
 * @date 2019/3/13 21:46
 */
public class Demo {
    Object object = new Object();

    public void fun() {
        synchronized (object) {
            while (true) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName());
            }
        }
    }

    ///
    /*
    String name = "a";

    public void fun() {
        synchronized (this) {
            while (true) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName());
            }
        }
    }
    */

    public static void main(String[] args) {
        Demo demo = new Demo();
        new Thread(demo::fun, "t1").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 此处改变了锁对象的属性, 但是并不会影响到锁对象(this)的使用, t2线程不会被打印.
        // demo.name = "b";
        /*
            t1
            t1
            t1
            t1
            t1
            t1
         */

        // 此处改变了锁对象的引用, t2线程将被打印.
        demo.object = new Object();
        new Thread(demo::fun, "t2").start();
        /*
            t1
            t1
            t2
            t1
            t2
            t2
         */

    }
}
说明:
  • 本篇文章如有不正确或待改进的地方, 欢迎批评和指正, 大家一同进步, 谢谢!
  • 世上有4样东西可以让世界变得更美好, 它们是: 代码(Code), 诗(Poem), 音乐(Music), 爱(Love). 如有兴趣了解更多, 欢迎光顾"我的文集"相关文章.
资料:
  1. 学习视频: https://www.bilibili.com/video/av11076511/?p=1
  2. 参考代码: https://github.com/EduMoral/edu/tree/master/concurrent/src/yxxy
  3. 我的代码: https://github.com/ChrisLeejing/learn_concurrency.git

相关文章

  • 1.17 如果锁对象的属性或锁本身引用发生改变, 锁的使用会受影

    说明: 本篇文章如有不正确或待改进的地方, 欢迎批评和指正, 大家一同进步, 谢谢! 世上有4样东西可以让世界变得...

  • 并发编程反模式

    不连贯的同步性: 为了同步某个对象或者对象本身的某个域的访问,使用同步锁(内部锁或者显式锁,例如,对象本身的内部锁...

  • Java并发编程实践

    内部锁 synchronized块有两个部分:锁对象的引用以及保护的代码块。方法的锁是方法所在的对象本身,静态方法...

  • Day26 Synchronized

    synchronized原理详解synchronized内置锁是一种对象锁(锁的是对象而非引用),作用粒度是对象,...

  • synchronized踩坑

    不要使用字符串常量作为对象锁去同步代码 synchronized是对象锁,但是对于这个Java内置的对象锁如果理解...

  • 071-JAVA线程安全的同步锁方案【阻塞】

    1.互斥锁 使用互斥锁对象保证临界区内代码的原子性。 同步代码块的锁:需要显式指定锁对象。 同步方法的锁:默认锁对...

  • synchronized

    方法锁和对象锁效果相同,同一对象的引用阻塞,不同对象引用不阻塞 类锁 :静态的方法和变量,即使类实例化多次,也只存...

  • Java多线程基础-使用多线程(二)

    |-目录|  同步锁  -|同步锁使用范围  -|对象锁与静态锁  -|死锁|  volatile实现’内存共享’...

  • sychronized的偏向锁,轻量级锁和重量级锁

    1.偏向锁:在锁对象的对象头中记录一下当前获取到该锁的线程ID,该线程如果再次获取该对象的的锁就可以直接获取锁(锁...

  • 线程 3. 锁对象

    什么是锁对象?每个java对象都有一个锁对象.而且只有一把钥匙. 如何创建锁对象:可以使用this关键字作为锁对象...

网友评论

      本文标题:1.17 如果锁对象的属性或锁本身引用发生改变, 锁的使用会受影

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