Nếu tôi tạo các lớp, được sử dụng tại thời điểm này chỉ trong một chủ đề duy nhất, tôi có nên làm cho chúng an toàn không, ngay cả khi tôi không cần nó vào lúc này? Có thể xảy ra, sau đó tôi sử dụng lớp này trong nhiều chủ đề, và vào thời điểm đó tôi có thể nhận được điều kiện đua và có thể khó có thể tìm thấy chúng nếu tôi không làm cho lớp an toàn ở nơi đầu tiên. Hay tôi nên làm cho lớp không an toàn cho luồng, để có hiệu suất tốt hơn? Nhưng tối ưu hóa sớm là điều ác.Tôi có nên luôn làm cho chuỗi an toàn java-code của mình hay vì lý do hiệu suất chỉ thực hiện khi cần?
Yêu cầu khác: Tôi có nên làm cho lớp của mình an toàn khi cần (nếu được sử dụng trong nhiều chủ đề, nếu không) hoặc tôi nên tối ưu hóa vấn đề này sau đó (nếu tôi thấy đồng bộ ăn phần quan trọng của thời gian xử lý)?
Nếu tôi chọn một trong hai cách, có phương pháp nào để giảm bớt bất lợi không? Hoặc tồn tại một khả năng thứ ba, rằng tôi nên sử dụng?
EDIT: Tôi đưa ra lý do khiến câu hỏi này nảy sinh trong tâm trí của tôi. Tại công ty chúng tôi, chúng tôi đã viết một quản lý người dùng rất đơn giản để ghi dữ liệu vào các tệp thuộc tính. Tôi đã sử dụng nó trong một ứng dụng web và sau khi một số công việc trên đó tôi đã nhận được các lỗi lạ, việc quản lý người dùng quên mất các thuộc tính của người dùng (bao gồm tên và mật khẩu) và các vai trò. Điều đó rất khó chịu nhưng không thể lặp lại một cách nhất quán, vì vậy tôi nghĩ đó là điều kiện đua. Vì tôi đã đồng bộ tất cả các phương thức đọc và ghi từ/trên đĩa, vấn đề đã biến mất. Vì vậy, tôi nghĩ, có lẽ tôi đã tránh được mọi rắc rối, nếu chúng tôi đã viết lớp với sự đồng bộ hóa ngay từ đầu?
CHỈNH SỬA 2: Khi tôi xem qua các mẹo của Lập trình viên thực dụng, tôi đã thấy mẹo # 41: Luôn thiết kế cho đồng thời. Điều này không nói rằng tất cả các mã nên được an toàn thread, nhưng nó nói rằng thiết kế nên có đồng thời trong tâm trí.
Điều gì đó để giúp phân tích của bạn là không nghĩ đến việc đồng thời là tối ưu hóa sớm, mà là mối quan tâm về hiệu suất giống như BigO. Các quan sát tối ưu hóa ác là có liên quan đến những người bỏ vòng lặp hoặc chuyển đổi khó hiểu - nếu cấu trúc có điều kiện trong C/C++ không thể giải mã và duy trì, và có thể không mang lại cho bạn hiệu năng sau khi trình biên dịch thông qua mã (hoặc trong java thời gian chạy JIT). – reccles