自己比照写的测试例子:
目的就是为了解决一个类中两个同步方法,会产生不必要的资源竞争和等待。
实际就是用同步代码块去实现,这个两个方法本身不是同步方法,就不会对当前类对象产生资源竞争。
而两个方法中的同步代码块锁定的对象,又不是一个对象,所以...
class Test12{
private String lock1 = "1";
private String lock2 = "2";
public void a(){
try{
synchronized(lock1){
Thread.sleep(1000);
System.out.println("a");
Thread.sleep(1000);
}
}catch(Exception e){
e.printStackTrace();
}
}
public void b(){
try{
synchronized(lock2){
System.out.println("b");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]){
class T extends Thread{
private Test12 t12;
public T(Test12 t12){
this.t12 = t12;
}
public void run(){
this.t12.a();
}
}
class Tt extends Thread{
private Test12 t12;
public Tt(Test12 t12){
this.t12 = t12;
}
public void run(){
this.t12.b();
}
}
Test12 t12 = new Test12();
new T(t12).start();
//new T(t12).start();
new Tt(t12).start();
}
}