import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class SharedResource {
private int sharedVariable;
public synchronized void increment() {
sharedVariable++;
}
public synchronized int getSharedVariable() {
return sharedVariable;
}
}
class WorkerThread implements Runnable {
private SharedResource sharedResource;
public WorkerThread(SharedResource sharedResource) {
this.sharedResource = sharedResource;
}
public void run() {
for (int i = 0; i < 1000; i++) {
sharedResource.increment();
}
}
}
public class Main {
public static void main(String[] args) {
int numberOfThreads = 5;
ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
SharedResource sharedResource = new SharedResource();
for (int i = 0; i < numberOfThreads; i++) {
Runnable workerThread = new WorkerThread(sharedResource);
executorService.execute(workerThread);
}
executorService.shutdown();
try {
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Shared variable value: " + sharedResource.getSharedVariable());
}
}