phép nói rằng tôi có một sợi chạy như thế này:Bắt giá trị của một biến chủ đề từ bên ngoài
private boolean working = true;
@Override public void run() {
working = true;
// do something
working = false;
....
}
và trong Chủ đề chính của tôi tôi đang liên tục đưa ra các trạng thái làm việc với
while(threadClassObject.isWorking()) {
System.out.println(threadClassObject.isWorking());
}
có hoạt động không? Tôi đã thử ví dụ này và có vẻ như nó hoạt động. Nhưng có cách nào mà điều này có thể sụp đổ? Ví dụ: xảy ra nếu thread đang trong quá trình thay đổi làm việc trong khi tại chính xác cùng một thời gian mainThread cố gắng để đọc nó?
Ok cảm ơn các bạn đã trả lời câu hỏi, bây giờ đã thay đổi nó thành biến động. Chính xác thì điều gì sẽ xảy ra nếu họ va chạm?Nguyên nhân tôi bây giờ đã thực hiện 2 vòng lặp vô tận, một trong các chủ đề mà constanstly thay đổi biến làm việc và một trong chủ đề chính mà liên tục kiểm tra nó và không có gì xảy ra. –
Về cơ bản bcoz tối ưu hóa ở cấp cpu, giá trị thay đổi một sợi của tôi có thể không được hiển thị cho một chủ đề khác. Một ví dụ điển hình là cpu cache bcoz tối ưu hóa các giá trị không bao giờ được phản ánh trong ram mà thread khác có thể được đọc. Dễ bay hơi nói rằng giá trị của biến này có thể được thay đổi bên ngoài phạm vi của chuỗi hiện tại, do đó không có tối ưu hóa nào được thực hiện ... – havexz