上QQ阅读APP看书,第一时间看更新
2.1.8 继承环境下的锁重入
锁重入也支持在父子类继承的环境。
创建实验项目synLockIn_2,类Main.java代码如下:
package myservice; public class Main { public int i = 10; synchronized public void operateIMainMethod() { try { i--; System.out.println("main print i=" + i); Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
子类Sub.java代码如下:
package myservice; public class Sub extends Main { synchronized public void operateISubMethod() { try { while (i > 0) { i--; System.out.println("sub print i=" + i); Thread.sleep(100); super.operateIMainMethod(); } } catch (InterruptedException e) { e.printStackTrace(); } } }
自定义线程类MyThread.java代码如下:
package extthread; import myservice.Main; import myservice.Sub; public class MyThread extends Thread { @Override public void run() { Sub sub = new Sub(); sub.operateISubMethod(); } }
运行类Run.java代码如下:
package test; import extthread.MyThread; public class Run { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); } }
程序运行结果如图2-14所示。
图2-14 重入到父类中的锁
此示例说明,在存在父子类继承关系时,子类是完全可以通过锁重入调用父类的同步方法的。