Tôi nhận thấy rằng NetBeans đang cảnh báo tôi về việc sử dụng Thread.sleep() trong một vòng lặp while trong mã Java của tôi, vì vậy tôi đã thực hiện một số nghiên cứu về chủ đề này. Có vẻ như vấn đề chính là một trong những hoạt động, nơi mà tình trạng trong khi của bạn có thể trở thành sự thật trong khi bộ đếm vẫn đang ngủ, do đó lãng phí thời gian đồng hồ treo tường khi bạn đợi cho lần lặp tiếp theo. Điều này tất cả làm cho cảm giác hoàn hảo.Thread.sleep() trong một vòng lặp while
Ứng dụng của tôi có nhu cầu liên hệ với hệ thống từ xa và thăm dò định kỳ trạng thái của một thao tác, đợi cho đến khi hoàn thành thao tác trước khi gửi yêu cầu tiếp theo. Tại thời điểm này mã logic thực hiện điều này:
String state = get state via RPC call
while (!state.equals("complete")) {
Thread.sleep(10000); // Wait 10 seconds
state = {update state via RPC call}
}
Cho rằng hoàn cảnh đang kiểm tra một hoạt động từ xa (mà là một quá trình khá tốn kém, trong đó nó chạy trong vài giây), là này một sử dụng hợp lệ của Chủ đề. sleep() trong một vòng lặp while? Có cách nào tốt hơn để cấu trúc logic này? Tôi đã nhìn thấy một số ví dụ mà tôi có thể sử dụng một lớp Timer, nhưng tôi không nhìn thấy lợi ích, vì nó vẫn có vẻ sôi xuống cùng một logic đơn giản ở trên, nhưng với rất nhiều phức tạp hơn ném vào.
Bear ghi nhớ rằng hệ thống từ xa trong trường hợp này không thuộc quyền kiểm soát trực tiếp của tôi, cũng không phải được viết bằng Java, vì vậy việc thay đổi kết thúc đó trở nên "hợp tác" hơn trong kịch bản này không phải là một lựa chọn. Tùy chọn duy nhất của tôi để cập nhật giá trị của ứng dụng cho trạng thái là tạo và gửi một tin nhắn XML, nhận phản hồi, phân tích cú pháp và sau đó trích xuất thông tin tôi cần.
Mọi đề xuất hoặc nhận xét sẽ được chào đón nhiều nhất.
Tôi nghĩ rằng trong tình huống của bạn nó là hoàn toàn đúng (nếu bạn không thể nhận được thông báo khi có cuộc gọi rpc xong). Cách để nhận được xung quanh cảnh báo đang sử dụng làm trong khi chu kỳ. – kenota
Tôi nghĩ rằng chi phí bỏ phiếu cho nhà nước của cuộc gọi RPC cần phải được khá cao để đảm bảo một giấc ngủ 10 giây. Một giây sẽ hợp lý hơn, hoặc một giấc ngủ chờ lâu hơn tùy thuộc vào số lượng các hoạt động ngủ trước đó (với mức tối đa nhất định của khóa học). –
Như tôi đã lưu ý, hoạt động từ xa chạy trong vài giây (theo đó tôi muốn nói ở bất cứ đâu từ 3-5). Với một số trường hợp cạnh, có một trường hợp phải được thực hiện rằng 10 giây là quá ngắn. –