Chà nếu các chuỗi của bạn đủ duy nhất (ví dụ:được tạo thông qua băm mật mã) thì việc đồng bộ hóa trên ID ứng dụng khách có thể sẽ hoạt động , miễn là bạn gọi String.intern()
trên chúng đầu tiên. Vì các ID là duy nhất, bạn không có khả năng xảy ra xung đột với các mô-đun khác, trừ khi bạn tình cờ chuyển ID của mình cho chúng và họ thực hiện theo thói quen xấu là khóa chúng.
Điều đó nói rằng, nó có lẽ là một ý tưởng tồi. Ngoài khả năng một ngày bạn gặp phải sự tranh cãi không cần thiết nếu ai đó khóa trên cùng một String
ví dụ, vấn đề chính là bạn phải intern()
tất cả String
của bạn các đối tượng và điều này thường có hiệu suất kém do bảng thực tập chuỗi được triển khai nguyên bản, nó có kích thước cố định, v.v. Nếu bạn thực sự cần khóa chỉ dựa trên String
, bạn nên sử dụng Interners.newWeakInterner()
thực hiện interner, có khả năng hoạt động tốt hơn nhiều. Bọc chuỗi của bạn trong một lớp khác để tránh xung đột trên String
tích hợp sẵn Khóa. Thêm chi tiết về cách tiếp cận đó trong câu trả lời này
.
Bên cạnh đó, thường có một đối tượng tự nhiên khác để khóa, chẳng hạn như khóa trong một đối tượng phiên, v.v.
Điều này khá giống với câu hỏi này có nhiều câu trả lời hơn.
... hoặc tối thiểu là phải có đủ bit để ít xảy ra va chạm và nếu ID khách hàng của bạn không phải là một phần của bề mặt tấn công .