Na przykład, czy to jest lepsze?Lepiej jest mieć zsynchronizowany blok wewnątrz bloku try lub blok try wewnątrz zsynchronizowanego bloku?
try {
synchronized (bean) {
// Write something
}
} catch (InterruptedException e) {
// Write something
}
Albo tak jest lepiej:
synchronized (bean) {
try {
// Write something
}
catch (InterruptedException e) {
// Write something
}
}
zastanawiałem się, która z nich jest najlepsza praktyka. Oczywiście biorąc pod uwagę muszę zsynchronizować cały kod wewnątrz bloku try. Nie mówię o przypadku, że muszę zsynchronizować tylko część kodu wewnątrz try (w tym przypadku myślę, że byłoby lepiej mieć blok synchronizujący wewnątrz try). Moje wątpliwości dotyczą przypadku, w którym muszę zsynchronizować cały blok try.
'Jeśli więc musisz wykonać operacje w sekcji catch ... nie zablokuje to innych wątków." Dlaczego zrezygnujemy z blokady z powodu wyjątku? – Cratylus
Jak powiedział @Gray, musisz wybrać nagranie do pożądanego efektu, zsynchronizować akcję bloku catch i nie, i mieć najmniejszy zsynchronizowany blok, jak to możliwe. Ale myślę, że musisz wziąć pod uwagę blok try-catch otaczający kod, który naprawdę chcesz ochronić, unikając większych bloków, co oznacza, że możemy podsumować te dwie dobre praktyki programistyczne: 1. Zachowaj małe zsynchronizowane bloki 2. Zachowaj try/catch bloków otaczających kod, który naprawdę chcesz strzec. –
"Dlaczego mielibyśmy zrezygnować z blokady z powodu wyjątku". Ponieważ połączenia dzienników mogą być synchroniczne i kosztowne? Zależy to od kodu znajdującego się w bloku 'catch' bloku @Catatylus. – Gray