2013-07-08 52 views
6

Tài liệu Java tôi đang sử dụng làm rõ rằng phương thức Object.wait() yêu cầu lại màn hình được kết hợp trước khi nó trả về, bất kể nó được thông báo hay là một lần đánh thức giả mạo; bất kỳ trở lại phương pháp bình thường sẽ được trước bởi một phản ứng màn hình.Phương thức Object.wait() có phản hồi màn hình khi nó ném một ngoại lệ không?

Tuy nhiên, có một chút ít rõ ràng hơn về những gì sẽ xảy ra trong sự kiện Object.wait() ném ngoại lệ, ví dụ: Interrupted Exception. Tôi đoán rằng nó thực sự phản ứng lại khóa trước khi ném một ngoại lệ. Tuy nhiên, các tài liệu không phải là rất rõ ràng về điều đó, vì vậy tôi không chắc chắn 100% ...

Dưới đây là documentaiton Tôi đang tìm tại địa chỉ: http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait%28%29

Vì vậy, là suy luận của tôi đúng, hoặc mã gọi điện thoại của tôi có cần phải giải quyết trạng thái của màn hình (ví dụ, nếu cần) sau khi có ngoại lệ?

Trả lời

5

JLS chỉ định điều này chi tiết hơn nhiều so với Javadoc của Object#wait. Theo văn bản đó, khóa phải được phản ứng vô điều kiện. Trích dẫn các bit có liên quan:

  1. Chủ đề t được thêm vào tập chờ đợi của đối tượng m, và thực hiện n mở khóa các hành động trên m.

  2. Chủ đề t không thực hiện bất kỳ hướng dẫn thêm cho đến khi nó đã bị xóa khỏi m 's chờ thiết lập. Các chủ đề có thể được gỡ bỏ từ tập chờ đợi do bất kỳ một trong những hành vi sau đây, và sẽ tiếp tục thỉnh thoảng sau:

    • [...]

    • Một hành động ngắt được thực hiện trên t .

  3. Chủ đề t Thực hiện n hành động khóa trên m.

+0

Theo kinh nghiệm, điều này có vẻ đúng. Nó cũng hợp lý. Tôi không chắc chắn nó có thể được suy ra từ các tài liệu, trong đó cho thấy một lỗi tài liệu. –

+0

@PatriciaShanahan Tôi đã viết lại hoàn toàn câu trả lời: JLS trên thực tế chỉ định khá rõ ràng rằng khóa sẽ được vô điều kiện phản ứng lại. –

+0

@PatriciaShanahan Cảm ơn, điều đó giải thích rõ ràng. Cảm ơn bạn đã liên kết JLS ... Tôi sẽ sử dụng nó vào lần sau tôi có câu hỏi tương tự mà tài liệu API không giải quyết. :) –