美文网首页
理解Java中的synchronized关键字

理解Java中的synchronized关键字

作者: 一个小草人 | 来源:发表于2019-01-27 14:12 被阅读0次

指标:理解synchronized的含义、明确synchronized关键字修饰普通方法、静态方法和代码块时锁对象的差异。

synchronized是一种同步锁,可以实现同步机制。
同步机制就是对资源进行加锁,保证同一时间只有一个线程可以操作对应资源,避免多线程同时访问相同资源造成冲突。
synchronized可以修饰普通方法、静态方法、代码块
修饰普通方法锁住的是类的实例对象
修饰静态方法锁住的是类对象
修饰代码块包括普通代码块synchronized(obj),效果同修饰通普通方法、静态代码块synchronized(obj.class),效果同修饰静态方法

有如下一个类A

class A {
    public synchronized void a() {
    }

    public synchronized void b() {
    }
}

然后创建两个对象
A a1 = new A();
A a2 = new A();

然后在两个线程中并发访问如下代码:
Thread1 Thread2
a1.a(); a2.a();

请问二者能否构成线程同步?
答:二者不能构成线程同步,因为两个线程的锁对象不是同一个
如果A的定义是下面这种呢?

class A {
    public static synchronized void a() {
    }

    public static synchronized void b() {
    }
}

答:二者能构成线程同步,因为两个线程的锁对象是同一个,都是类对象

相关文章

网友评论

      本文标题:理解Java中的synchronized关键字

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