Dưới đây là một số câu hỏi gần đây tôi đã hỏi những người được phỏng vấn nói rằng họ biết đồng thời Java:
- Giải thích mối nguy của "khả năng hiển thị bộ nhớ" - cách JVM có thể sắp xếp lại các hoạt động nhất định trên các biến không được bảo vệ bởi màn hình và không được khai báo
volatile
, sao cho một luồng có thể không nhìn thấy các thay đổi được thực hiện bởi luồng khác. Thông thường tôi hỏi cái này bằng cách hiển thị mã nơi có mối nguy hiểm này (víNoVisibility
dụ như trong Liệt kê 3.1 từ "Đồng thời Java trong thực tiễn" của Goetz et al) và hỏi điều gì sai. - Giải thích làm thế nào
volatile
ảnh hưởng đến không chỉ biến thực tế được khai báovolatile
, mà còn bất kỳ thay đổi nào đối với các biến được tạo bởi một luồng trước khi nó thay đổivolatile
biến. - Tại sao bạn có thể sử dụng
volatile
thay vìsynchronized
? - Thực hiện một biến điều kiện với
wait()
vànotifyAll()
. Giải thích tại sao bạn nên sử dụngnotifyAll()
. Giải thích tại sao biến điều kiện nên được kiểm tra bằng mộtwhile
vòng lặp.
Câu hỏi của tôi là - những điều này phù hợp hay quá tiên tiến để hỏi ai đó nói rằng họ biết đồng thời Java?
Và trong khi chúng ta đang ở đó, bạn có nghĩ rằng ai đó làm việc trong đồng thời Java sẽ được mong đợi có kiến thức trên mức trung bình về bộ sưu tập rác Java không?
notifyAll()
"Tôi không tin vào việc thực hiện công việc của bộ lập lịch hệ điều hành, vì vậy tôi sử dụng notify()
"