版权声明:版权归 爱装逼的文艺小青年所有 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
通过结果可以将上述导语结论给验证!