Deadlock in Java – something you should know 1

Công Nghệ
Deadlock in Java – something you should know 1
Bài viết được sự cho phép của tác giả Kiên Nguyễn Nếu bạn đã có kinh nghiệm hoặc đã tiếp xúc qua với Java Concurrency, hẳn không còn xa lạ gì với khái niệm DeadLock. Tuy nhiên, bài viết này vẫn cung cấp một cái nhìn tổng quan, dễ hiểu...

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Nếu bạn đã có kinh nghiệm hoặc đã tiếp xúc qua với Java Concurrency, hẳn không còn xa lạ gì với khái niệm DeadLock. Tuy nhiên, bài viết này vẫn cung cấp một cái nhìn tổng quan, dễ hiểu hơn về DeadLock.

Dành cho những ai đang muốn tìm hiểu về deadlock. Bắt đầu ngay thôi nào!

1. DeadLock là gì?

Deadlock is a situation where a set of processes are blocked because each process is holding a resource and waiting for another resource acquired by some other process.

Deadlock là tình trạng các process block lẫn nhau do process này thì chờ tài nguyên kia, tài nguyên kia thì đang được một process khác nữa giữ lấy

Dead – Chết, nghe thôi đã thấy lạnh. Lock – Khóa, khóa lại trong nhau mà chết là từ chính xác dùng để diễn tả về Dead Lock

Deadlock lock and waitDeadlock lock and waitVòng lặp không lối thoát – Nguồn ảnh / Source: geeksforgeeks.org

Xem tin tuyển dụng Java mới nhất trên Station D

2. Xảy ra lúc nào?

Tuy vậy, có phải lúc nào cũng xảy ra deadlock hay không?. Câu trả lời là không. Ở một số trường hợp liệt kê dưới đây sẽ xảy ra:

  • Mutual exclusion – Loại trừ nhau
  • Lock & wait – Chờ rồi tèo
  • No preemption – Không ưu tiên
  • Circular wait – Chờ nhau theo vòng tròn

2.1 Mutual Exclusion

Loại trừ lẫn nhau chính xác là khi hai hay nhiều thread cần sử dụng chung một resource. Nhiều connection đòi thực thi trên một table là ví dụ điển hình.

Một connection đều yêu cầu được ghi record mới vào table, nhưng table thì đang được lock bởi thread khác. Deadlock coming

2.2 Lock and wait

Khóa và chờ cũng gần giống như loại trừ lẫn nhau. Trường hợp này là một thread cứ chày cối dữ lấy tài nguyên (resource) không buông. Các thread khác thì cứ chờ.

Chờ hoài không thấy, chờ người nơi ấy. Dẫn tới chờ rồi chết cả đám

2.3 No preemption

Không có quyền ưu tiên. Trường hợp này được hiểu là resource A đang rất cần resource, nhưng nó không có quyền lấy resource từ thằng B đang giữ nó. Hai thằng giành nhau cũng xảy ra DeadLock

2.4 Circular Wait

Circular Wait là chờ vòng tròn, lặp trong vô vọng. Thằng T1 thì cần tài nguyên R2, T2 thì cần tài nguyên R3, T3 thì cần tài nguyên R1 của T1.

Nhức cả cái đầu nhưng xoay mòng mòng thành một cái vòng chờ nhau không lối thoát

Circular Wait, đợi nhau trong vòng tròn vô tận. Nguồn ảnh/ Source: The Robert C. Martin Clean Code Collection

3. Tổng kết

Deadlock là nỗi sợ to lớn với dân lập trình multi thread, concurency. Mỗi khi nó coming, y như cái tên của nó, chỉ có chết. Nhưng biết thì sẽ luôn có cách để phòng tránh.

Ở phần hai của series bài viết về deadlock sẽ là cách phòng tránh đối với từng loại. Đón đọc nha!.

4. Tham khảo

Wish you have best of luck. Have a good day!. Happy coding!

Bài viết gốc được đăng tải tại kieblog.vn

Có thể bạn quan tâm:

Xem thêm Tuyển lập trình Java hấp dẫn trên Station D

Bài viết liên quan

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Kết quả từ cuộc khảo sát đầu năm của Station D về lương bổng của lập trình viên cho thấy nhiều thay đổi đã và đang diễn ra trong ngành IT – cuộc khảo sát tập trung vào các câu hỏi về khối lượng công việc, triển vọng cũng như...

By stationd
Đâu chỉ mỗi Bitcoin, công nghệ Blockchain còn nhiều ứng dụng hơn thế!

Đâu chỉ mỗi Bitcoin, công nghệ Blockchain còn nhiều ứng dụng hơn thế!

Khi nhắc đến blockchain , lập tức mọi người thường nghĩ ngay đến các loại tiền mã hóa, chẳng hạn như bitcoin. Tuy nhiên, blockchain lại là công nghệ tạo ra tiền mã hóa nhưng bản thân công nghệ này không phải là tiền mã hóa như cách mà chúng...

By stationd
Mock phương thức static trong Unit Test sử dụng PowerMock

Mock phương thức static trong Unit Test sử dụng PowerMock

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong bài viết này, mình sẽ hướng dẫn các bạn Mock các phương thức static trong Unit Test các bạn nhé! Nếu bạn nào chưa biết về Mock trong Unit Test thì mình có thể nói sơ qua...

By stationd
Một "thuật ngữ ma" đã tồn tại 75 năm trên internet, nó đang "ám" vào các mô hình AI, và sẽ còn tiếp tục tồn tại cho đến vĩnh cửu

Một "thuật ngữ ma" đã tồn tại 75 năm trên internet, nó đang "ám" vào các mô hình AI, và sẽ còn tiếp tục tồn tại cho đến vĩnh cửu

Một lời cảnh báo cho những người thích trích dẫn kiểu "nguồn sưu tầm", "nguồn internet" hay "nguồn AI", họ có thể sẽ đào lên được những "hóa thạch số" vô nghĩa.

By admin
Cảnh Báo Malware Giả Mạo Hợp Đồng Việc Làm: Tập Tin .EXE Nguy Hiểm Đội Lốt PDF/Word

Cảnh Báo Malware Giả Mạo Hợp Đồng Việc Làm: Tập Tin .EXE Nguy Hiểm Đội Lốt PDF/Word

Kẻ xấu đang lợi dụng nhu cầu tìm việc để phát tán phần mềm độc hại (malware) dưới dạng tệp 'hợp đồng' giả mạo. Hãy cảnh giác với những file có icon Word/PDF nhưng thực chất là .exe. Nếu mở, máy tính của bạn có thể bị đánh cắp toàn bộ thông tin cá nhân, cookie và mật khẩu.

By admin