可重入性粒度测试
没有造成死锁,即可证明满足可重入性。
所需要的锁和手中已有的锁是同一把,因此是可重入的。
1、递归调用自己
/**
* 可重用粒度测试:递归调用本方法
*/
public class SynchronizedRecursion10 {
int a = 0;
public static void main(String[] args) {
SynchronizedRecursion10 instance = new SynchronizedRecursion10();
instance.method1();
}
private synchronized void method1() {
System.out.println("这是method1, a = " + a);
if (a == 0) {
a++;
method1();
}
}
}
执行结果:
这是method1, a = 0
这是method1, a = 1
2、调用类内其他方法
/**
* 可重用粒度测试:调用类内其他方法
*/
public class SynchronizedOtherMethod11 {
public static void main(String[] args) {
SynchronizedOtherMethod11 instance = new SynchronizedOtherMethod11();
instance.method1();
}
private synchronized void method1() {
System.out.println("这是method1");
method2();
}
private synchronized void method2() {
System.out.println("这是method2");
}
}
执行结果:
这是method1
这是method2
3、调用父类方法
/**
* 可重用粒度测试:调用父类方法
*/
public class SynchronizedSuperClass12 {
public synchronized void doSomething() {
System.out.println("我是父类方法");
}
}
class TestClass extends SynchronizedSuperClass12 {
public synchronized void doSomething() {
super.doSomething();
System.out.println("我是子类方法");
}
public static void main(String[] args) {
TestClass t = new TestClass();
t.doSomething();
}
}
执行结果:
我是父类方法
我是子类方法