Locking at object level can be achieved by marking a non-static block of code or non-static method (the lock object for that method's object) with synchronized. In the following examples, only one thread at a time will be allowed to execute the synchronized method/block on the given instance of the class:
- Synchronized method case:
public class ClassOll {
public synchronized void methodOll() {
...
}
}
- Synchronized block of code:
public class ClassOll {
public void methodOll() {
synchronized(this) {
...
}
}
}
- Another synchronized block of code:
public class ClassOll {
private final Object ollLock = new Object();
public void methodOll() {
synchronized(ollLock) {
...
}
}
}