Junior — Middle
Как да предотвратим взаимното блокиране на два потока в многонишково приложение?
sobes.tech AI
Отговор от AI
Взаимната блокировка (deadlock) възниква, когато два или повече нишки завинаги очакват освобождаването на ресурси от другата. За да предотвратите deadlock, можете да използвате следните подходи:
- Избягвайте вложени блокировки: минимизирайте броя на ресурсите, които се придобиват едновременно.
- Подреждайте придобиването на ресурси: винаги придобивайте ресурсите в същия ред във всички нишки.
- Използвайте таймаути: при опит за придобиване на блокировка, използвайте таймаут, за да избегнете безкрайно очакване.
- Използвайте по-високо ниво на синхронизиращи примитиви: например, от пакета
java.util.concurrentв Android, които намаляват вероятността от deadlock.
Пример за подредено придобиване на ресурси:
synchronized (resourceA) {
synchronized (resourceB) {
// работа с ресурсите
}
}
Ако всички нишки следват реда първо resourceA, после resourceB, deadlock няма да се случи.