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

Java中的synchronized关键字

作者: anak | 来源:发表于2018-03-29 19:33 被阅读0次

    ####指标:理解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在对该类对象进行操作的时候,会形成阻塞。

    相关文章

      网友评论

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

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