14、synchronized代码块间的同步性

版权声明:版权归 爱装逼的文艺小青年所有 https://blog.csdn.net/toyota_rav4/article/details/85009586

导语:我们在使用synchronized(this)同步代码块的时候需要注意:当一个线程访问object对象的一个synchronized(this)同步代码块的时候,其他线程对该object对象中的其他synchronized(this)同步代码块的访问将会是阻塞的。synchronized(this)使用的“对象监视器”是一个。

案例:

package com.demo16;

import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

public class MyObject {
    public void a(){
        try {
            synchronized (this) {
                System.out.println("a begin time : " + System.currentTimeMillis());
                Thread.sleep(2000);
                System.out.println("a end time : " + System.currentTimeMillis());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public void b(){
        synchronized (this) {
            System.out.println("b begin time : " + System.currentTimeMillis());
            System.out.println("b end time : " + System.currentTimeMillis());
        }
    }
}
package com.demo16;

public class ThreadA extends Thread{
    private MyObject myObject;

    public ThreadA(MyObject myObject) {
        this.myObject = myObject;
    }

    @Override
    public void run(){
        myObject.a();
    }
}
package com.demo16;

public class ThreadB extends Thread {
    private MyObject myObject;

    public  ThreadB(MyObject myObject){
        this.myObject = myObject;
    }

    @Override
    public void run(){
        myObject.b();
    }
}
package com.demo16;

public class Run {
    public static void main(String[] args) {
        MyObject myObject = new MyObject();
        ThreadA threadA = new ThreadA(myObject);
        ThreadB threadB = new ThreadB(myObject);
        threadA.start();
        threadB.start();
    }
}

运行结果:

a begin time : 1544792680664
a end time : 1544792682665
b begin time : 1544792682665
b end time : 1544792682665

通过结果可以将上述导语结论给验证!

猜你喜欢

转载自blog.csdn.net/toyota_rav4/article/details/85009586