Câu hỏi phỏng vấn Java
Câu hỏi

Deadlock trong Java là gì?

Câu trả lời

Trong Java, deadlock là một tình huống mà hai hoặc nhiều luồng (threads) bị chặn mãi mãi, chờ đợi lẫn nhau. Điều này thường xảy ra khi nhiều luồng cần cùng một khóa (lock) hoặc tài nguyên nhưng lại nhận chúng theo thứ tự khác nhau

Một ví dụ điển hình về deadlock là tình huống "Alphonse và Gaston" mà hai người bạn này cùng cúi chào nhau và không ai đứng lên trước khi người kia đứng lên, dẫn đến việc họ cúi chào nhau mãi mãi. Trong lập trình đa luồng, điều này tương đương với việc mỗi luồng giữ một khóa và đợi khóa mà luồng khác đang giữ, khiến cả hai không thể tiếp tục thực thi.

Có bốn điều kiện cần thiết để xảy ra deadlock:

  1. Mutual Exclusion (Loại trừ lẫn nhau): Mỗi tài nguyên hoặc là không chia sẻ được và chỉ có thể được sở hữu bởi một luồng tại một thời điểm.
  2. Hold and Wait (Giữ và Chờ): Một luồng đang giữ ít nhất một tài nguyên và đợi thêm tài nguyên khác từ một tập các tài nguyên mà các luồng khác đang giữ.
  3. No Preemption (Không Đoạt Quyền): Tài nguyên không thể bị đoạt quyền; chỉ có thể được giải phóng tự nguyện bởi luồng đang giữ nó.
  4. Circular Wait (Chờ Đợi Vòng): Có một tập hợp các luồng {P1, P2, ..., Pn} sao cho P1 đang chờ đợi một tài nguyên được giữ bởi P2, P2 đang chờ đợi một tài nguyên được giữ bởi P3, và cuối cùng, Pn đang chờ đợi một tài nguyên được giữ bởi P1.

Để tránh hoặc giải quyết deadlock, một số phương pháp có thể được áp dụng như tránh tình trạng giữ và chờ bằng cách yêu cầu tất cả các tài nguyên cùng một lúc, sử dụng thứ tự ưu tiên để phân phối tài nguyên, hoặc sử dụng cơ chế đoạt quyền

middle

middle

Gợi ý câu hỏi phỏng vấn

senior

Design pattern nào Java sử dụng cho tất cả các Swing components?

middle

Trong Java điều gì sẽ xảy ra với đối tượng Exception sau khi xử lý exception?

middle

Design pattern nào trong thư viện JDK của Java?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào