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---------------------