Ví dụ, điều này có tốt hơn không?Tốt hơn là nên có khối đồng bộ bên trong khối thử hoặc khối thử bên trong khối được đồng bộ hóa?
try {
synchronized (bean) {
// Write something
}
} catch (InterruptedException e) {
// Write something
}
Hoặc nó tốt hơn này:
synchronized (bean) {
try {
// Write something
}
catch (InterruptedException e) {
// Write something
}
}
tôi đã tự hỏi cái nào là thực hành tốt nhất. Rõ ràng là tôi phải đồng bộ hóa tất cả các mã bên trong khối thử. Tôi không nói về trường hợp tôi đã đồng bộ hóa chỉ một phần của mã bên trong thử (trong trường hợp này tôi nghĩ rằng nó sẽ là tốt hơn để có khối đồng bộ bên trong thử). Nghi ngờ của tôi là về trường hợp tôi đã đồng bộ hóa tất cả khối thử.
'Sau đó, nếu bạn cần phải thực hiện các thao tác trong phần bắt ... những thứ này sẽ không chặn các chuỗi khác.' Tại sao chúng ta sẽ từ bỏ khóa do một ngoại lệ? – Cratylus
Giống như @Gray cho biết, bạn phải chọn theo hiệu ứng bạn muốn, để đồng bộ hóa hành động của khối catch hoặc không, và để có khối đồng bộ nhỏ nhất có thể. Nhưng, tôi nghĩ bạn phải xem xét để giữ khối try/catch xung quanh mã bạn thực sự muốn bảo vệ, tránh các khối lớn hơn, nói rằng, chúng ta có thể tóm tắt hai cách lập trình tốt: 1. Giữ các khối được đồng bộ hóa nhỏ 2. Keep thử/bắt khối xung quanh mã bạn thực sự muốn bảo vệ. –
"Tại sao chúng ta từ bỏ khóa do một ngoại lệ". Bởi vì các cuộc gọi đăng nhập có thể được đồng bộ và đắt tiền? Nó phụ thuộc vào mã nằm trong khối 'catch' @Cratylus. – Gray