public class Widget {
public synchronized void doSomething () {
System.out.println(this.toString()+"---------------------");
}
}public class LoggingWidget extends Widget {
public synchronized void doSomething () {
System.out.println(this.toString()+ ": calling doSomething");
super.doSomething();
}
public static void main (String[] args) throws InterruptedException {
for (int i = 0; i < 2; i++) {
Thread thread = new Thread(() -> {
Widget widget = new LoggingWidget();
widget.doSomething();
});
thread.start();
}
}
}com.concyrrency.test.lock.LoggingWidget@2cb7a5c1: calling doSomething com.concyrrency.test.lock.LoggingWidget@2cb7a5c1--------------------- com.concyrrency.test.lock.LoggingWidget@77df833b: calling doSomething com.concyrrency.test.lock.LoggingWidget@77df833b---------------------