结论:
父类和子类中分别有一个同步方法(没有重写),然后开启两个线程分别执行其中一个同步方法,最终结果是串行。结论:父类和子类中的同步方法是同一个锁。测试代码如下:
public class SynParent {
public synchronized void synParent(){
try {
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.printf("父类同步方法输出---------->结束时间:"+System.currentTimeMillis()+"\n");
}
}
SynChild.java
public class SynChild extends SynParent{
public synchronized void synChild(){
try {
Thread.sleep(2000);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.printf("子类同步方法输出---------->结束时间:"+System.currentTimeMillis()+"\n");
}
}
SynParentAndChildTest.java
public class SynParentAndChildTest extends Thread{
SynChild synChild;
int index;
public SynParentAndChildTest(SynChild synChild,int index) {
this.synChild = synChild;
this.index = index;
}
@Override
public void run() {
super.run();
if (0 == index){
System.out.printf("开始执行父类方法------>时间:"+System.currentTimeMillis()+"\n");
synChild.synParent();
}else {
System.out.printf("开始执行子类方法------>时间:"+System.currentTimeMillis()+"\n");
synChild.synChild();
}
}
}
main:
private static void synParentAndChildTest(){
SynChild synChild = new SynChild();
for (int i = 0; i < 2; i++){
SynParentAndChildTest synParentAndChildTest = new SynParentAndChildTest(synChild,i);
synParentAndChildTest.start();
}
}
结果: