Replace a Synchronized Block Advice with a Mutex Block Advice
So, lets first replace this around advice by one that uses a mutex intead of a synchronized block: public class MutexAspect { private Object lock = new Object(); private boolean locked = false; public Object aroundAdvice(Invocation invocation) throws Throwable { Object result; // part 1: retrieve lock before joinpoint execution synchronized(lock) { while (locked) { try { lock.wait(); } catch(InterruptedException e) { Thread.currentThread().interrupt(); return; } } locked = true; System.out.println(">>> Retrieved concurrency lock"); } // part 2: proceed to joinpoint execution result = invocation.invokeNext(); // part 3: release lock after joinpoint execution synchronized(lock) { locked = false; lock.notify(); System.out.println(" < < < Releasing concurrency lock"); } // part 4: return result return result; } }