Ensure Java synchronized locks are taken in order?

java, multithreading, synchronization

Solution

No, synchronized will give access in any order (Depends on the JVM implementation). This could even cause Threads to starve in some scenarios.

You can ensure the order by using ReentrantLock (since Java 5.0) with the `fair=true` option. (`Lock lock = new ReentrantLock(true);`)

Problem

we have two threads accessing one list via a synchronized method. Can we a) rely on the run time to make sure that each of them will receive access to the method based on the order they tried to or b) does the VM follow any other rules c) is there a better way to serialize the requests?

Original source