01/10/2018, 17:16

Hỏi về đa luồng: synchronized để đồng bộ hoá giữa các luồng khi sử dụng

em đang tìm hiểu về đa luồng trong java , em có 1 thắc mắc ợ
ví dụ : em có 1 khối lệnh và em dùng từ khóa synchronized để giúp đồng bộ hóa giữa các luồng khi sử dụng khối lệnh này

  1. ta có thể biết chính xác luồng nào đang sở hữu , hay sử dụng khối lệnh này không
  2. theo lý thuyết thì nếu luồng 1 đang sử dụng khối lệnh và bị die hoặc treo thì các luồng khác muốn sử dụng khối lệnh này cũng bị treo theo vậy trong trường hợp này ta có cách nào để set thời gian tối đa mà 1 luồng có thể sở hữu khối lệnh này không , kiểu như mình chỉ giới hạn thời gian sử dụng khối lệnh của 1 luồng nếu hết thời gian sẽ tự động trả khóa lại để luồng khác dùng …
Giang Phan viết 19:32 ngày 01/10/2018
  1. Có thể sử dụng Executor Service để checking luồng nào đang chạy, khi nào hoàn thành.
    https://gpcoder.com/3548-huong-dan-tao-va-su-dung-threadpool-trong-java/#Custom_Thread_Pool_Executor
  2. Có thể đặt một Flag=false trong Thread đang chạy, sau đó bạn check timeout trong một khoảng thời gian nếu nó không trả về kết quả thì bạn sẽ kết thúc xử lý. Cách này thường được sử dụng với Thread java < 8.
    Với java 8 bạn có thể dễ dàng xử lý việc này hơn thông qua CompletableFuture.get(timeout).
    https://gpcoder.com/4064-lap-trinh-da-luong-voi-completablefuture-trong-java-8/
Madafaker viết 19:32 ngày 01/10/2018

ok thanks bạn mình sẽ thử…

Bài liên quan
0