Цитата:
Сообщение от dantest
Я интересовался, как это повлияет на игру если не сделать рестарт если такой Deadlock имеется.
|
Со временем локнутся все триды в пуле packets, если дедлок в исполнении пакетов, сервер перестанет обрабатывать пакеты, очередь пакетов переполнится и мы получим out of memory, но скорее всего, перед этим Вам позвонит офигевший ГМ и скажет, что сервер повис.
Если включить, то ситуация аналогична, но офигевший ГМ уже звонит, то что сервер сам перезагружается. Особенно, это весело на эпиках.
Пример классического дедлока:
Код:
static Object sync1 = new Object();
static Object sync2 = new Object();
public static void main(String[] args) {
new Thread(() -> one()).start();
new Thread(() -> two()).start();
}
static void one() {
synchronized (sync1) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
synchronized (sync2) {
System.out.println("pew");
}
}
}
static void two() {
synchronized (sync2) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
synchronized (sync1) {
System.out.println("ololo");
}
}
}
Состояние гонки - тоже самое, но без слипа тридов. Если повезет, то можно поймать дедлок.
И вообще, google it.