Мне нужно написать максимально простой код который в 100% случаев запуска будет приводить к взаимной блокировке, но все примеры которые я рассматриваю дают только некоторую вероятность. Возможно ли такое написать, если да, то как бы это могло выглядеть в самом простом варианте?
public class TestThread {
public static Object Lock1 = new Object();
public static Object Lock2 = new Object();
public static void main(String args[]) {
ThreadDemo1 T1 = new ThreadDemo1();
ThreadDemo2 T2 = new ThreadDemo2();
T1.start();
T2.start();
}
private static class ThreadDemo1 extends Thread {
public void run() {
synchronized (Lock1) {
System.out.println("Thread 1: Holding lock 1...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Thread 1: Waiting for lock 2...");
synchronized (Lock2) {
System.out.println("Thread 1: Holding lock 1 & 2...");
}
}
}
}
private static class ThreadDemo2 extends Thread {
public void run() {
synchronized (Lock2) {
System.out.println("Thread 2: Holding lock 2...");
try { Thread.sleep(10); }
catch (InterruptedException e) {}
System.out.println("Thread 2: Waiting for lock 1...");
synchronized (Lock1) {
System.out.println("Thread 2: Holding lock 1 & 2...");
}
}
}
}
}
Источник
Проще всего, наверное, запустить в одном synchronized-методе ожидание самого себя в другом потоке.
public synchronized static void deadlock() {
try {
Thread t = new Thread(Test::deadlock);
t.start();
t.join();
} catch (Exception ex) {}
}
Проверка: http://ideone.com/yTbiKY
Ещё более короткий блокирующийся код:
new Semaphore(0).acquire();
но в нём нет многопоточности, так что это в зависимости от вашего представления может или может не быть deadlock'ом.
Проверка: http://ideone.com/k1izqy
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пишу для курсовой работы примитивный файловый менеджерХочу создать кнопку которая будет создавать новую папку
Приложение получает изображение от клиента по UDP и пока что выводит его в LabelBackground