import java.util.concurrent.locks.ReentrantLock;
public class SharedResource {
private int value;
private ReentrantLock lock;
public SharedResource() {
value = 0;
lock = new ReentrantLock();
}
public void increment() {
lock.lock();
try {
value++;
} finally {
lock.unlock();
}
}
public int getValue() {
return value;
}
}
public class ConcurrentTask implements Runnable {
private SharedResource sharedResource;
public ConcurrentTask(SharedResource sharedResource) {
this.sharedResource = sharedResource;
}
@Override
public void run() {
sharedResource.increment();
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
SharedResource sharedResource = new SharedResource();
Thread thread1 = new Thread(new ConcurrentTask(sharedResource));
Thread thread2 = new Thread(new ConcurrentTask(sharedResource));
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("Final value: " + sharedResource.getValue());
}
}