JavaScript is required

What is output?
Media VietJack

A.
Start End Start End
B.
Start Start Start
C.
Start Start Start Start
Trả lời:

Đáp án đúng: B


Đoạn code trên sử dụng các `Thread`, `synchronized` và phương thức `wait()`, `notifyAll()` để điều phối việc in ra "Start" và "End". 1. **Khởi tạo:** * Có một đối tượng `lock` được dùng để đồng bộ hóa các thread. * Biến `turn` được khởi tạo là 1, nó quyết định thread nào sẽ được in ra tiếp theo. * Ba `Thread` (A, B, C) được tạo, mỗi thread in ra "Start" hoặc "End" dựa trên giá trị của `turn`. 2. **Luồng hoạt động:** * Mỗi thread (A, B, C) chạy một vòng lặp vô hạn. * Trong mỗi vòng lặp, nó kiểm tra xem `turn` có phải là giá trị mà nó quản lý không (A:1, B:2, C:3). * Nếu không phải lượt của nó, thread gọi `lock.wait()` để giải phóng khóa và tạm dừng cho đến khi được thông báo. * Nếu đến lượt của nó, thread in ra thông báo tương ứng ("Start" hoặc "End"), cập nhật `turn` để thread tiếp theo được chạy, và gọi `lock.notifyAll()` để đánh thức tất cả các threads đang chờ. **Phân tích cụ thể:** * Thread A (turn == 1): In ra "Start", đặt turn = 2. * Thread B (turn == 2): In ra "Start", đặt turn = 3. * Thread C (turn == 3): In ra "Start", đặt turn = 1. Vòng lặp này sẽ tiếp tục in ra "Start" từ mỗi thread theo thứ tự A, B, C. Vì không có thread nào in ra "End", đáp án chính xác nhất là B.

Câu hỏi liên quan