package com.example.lock;

public class ReentrantLockExample {
	public static void main(String[] args) throws InterruptedException {
		LockSharedResource resource = new LockSharedResource();
		LockWorker worker1 = new LockWorker(resource);
		LockWorker worker2 = new LockWorker(resource);
		worker1.start();
		worker2.start();
		worker1.join();
		worker2.join();
		System.out.println("Final counter value: " + resource.getCounter());
	}
}

class LockWorker extends Thread {
	LockSharedResource resource = new LockSharedResource();

	public LockWorker(LockSharedResource resource) {
		this.resource = resource;
	}

	@Override
	public void run() {
		for (int i = 0; i < 5; i++) {
			resource.increment();
		}
	}
}