Java中的synchronized关键字

2018-03-29  本文已影响0人  anak

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

```

有如下一个类A

class A {

    public 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() {

    }

}

```

###回答:

synchronized是java的一个关键字,保持线程同步的一种机制,同步锁的一种,在同一个时间段里只有一个线程能对一个资源进行操作.

修饰方法时,是遵循一个对象一个锁的规律,每个对象都有一个内部锁。

1、修饰普通方法,不构成同步,两个对象分别对应两个不同的锁,线程a1对代码块进行读写的时候,不能保证线程同步。

2、修饰静态方法,构成同步,static关键字对该代码块形成了同一个锁,它的锁是对象锁,a1在对该类对象进行操作的时候,会形成阻塞。

上一篇下一篇

猜你喜欢

热点阅读