Witam.
Mam za zadanie napisać symulację deadlocka z ograniczeniem na to zjawisko tj. po pewnym czasie ma ono się zakończyć. Napisałem taki kod:
import java.util.Arrays;
import java.util.concurrent.*;
public class Deadlock {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
private long lengthOfEvent;
public Deadlock(long lengthOfEvent) {
this.lengthOfEvent = lengthOfEvent;
}
public void produceDeadLock() throws InterruptedException {
Callable<Void> threadOne = () -> {
synchronized(lock1) {
System.out.println("Thread 1 got lock1");
synchronized (lock2) {
System.out.println("Thread 2 got lock2");
}
}
return null;
};
Callable<Void> threadTwo = () -> {
synchronized(lock2) {
System.out.println("Thread 2 got lock2");
synchronized (lock1) {
System.out.println("Thread 2 got lock1");
}
}
return null;
};
ExecutorService execService = Executors.newFixedThreadPool(2);
execService.invokeAll(Arrays.asList(threadOne, threadTwo), lengthOfEvent, TimeUnit.SECONDS);
execService.shutdown();
System.out.println("After deadlock simulation finished!");
}
}
Jednakże po powrocie do metody main program się "zawiesza" wnioskuję, że jest to sprawa tego, że wątki wewnątrz serwisu są zablokowane wątki, którym ustawiam tylko bit interrupted. Może ktoś podpowiedzieć mi w jaki sposób zrealizować to "ograniczenie" czasowe?