Table of Contents

Java Concurrency - Fine-grained synchronization

About

Synchronized statements are also useful for improving concurrency with fine-grained synchronization.

Example

Suppose:

Instead of using synchronized methods or otherwise using the lock associated with this, we create two objects solely to provide locks.

public class MsLunch {

    // two instance fields, c1 and c2
    private long c1 = 0;
    private long c2 = 0;
    
    // two objects solely to provide locks
    private Object lock1 = new Object();
    private Object lock2 = new Object();

    public void inc1() {
        synchronized(lock1) {
            c1++;
        }
    }

    public void inc2() {
        synchronized(lock2) {
            c2++;
        }
    }
}