2011-06-26 27 views
6

Gần đây tôi đã nhìn thấy một đoạn mã sử dụng đối tượng ThreadLocal và giữ ConcurrentHashMap trong đó.Có lợi ích nào khi đặt đối tượng ThreadSafe lên ThreadLocal không?

Có bất kỳ logic/lợi ích nào trong vấn đề này hay không?

+0

@Downvoter - quan tâm giải thích? – RonK

+0

có một số người xung quanh ở đây mà chỉ downvote ... mà không có bất kỳ nhận xét ... tôi sẽ không cho phép downvotes mà không bình luận ... – Cris

Trả lời

7

Nếu chỉ tham chiếu chỉ vào băm đồng thời nằm trong ThreadLocal, thì băm rõ ràng chỉ được tham chiếu từ một chuỗi duy nhất. Trong trường hợp như vậy tôi sẽ nói nó là hoàn toàn dư thừa.

Tuy nhiên, nó không phải là khó để tưởng tượng một ai đó "chia sẻ" các hashmap lưu trữ thread-địa phương với chủ đề khác:

ThreadLocal<ConcurrentHashMap<String, String>> tl = ... 

// ... 

final ConcurrentHashMap<String, String> props = tl.get(); 

EventQueue.invokeLater(new Runnable() { 
    public void run() { 
     props.add(key.getText(), val.getText()); 
    } 
}); 
+0

Thật vậy. 'ThreadLocal' cho phép N luồng có N biến độc lập - nó có thể không liên quan đến các đối tượng chứa tất cả (không có yêu cầu là mỗi ThreadLocal có một đối tượng khác và/hoặc duy nhất). –

+0

Điểm tốt - Tôi sẽ kiểm tra xem có/đã sử dụng không. – RonK

0

Hoặc ông sử dụng ThreadLocal sai, hoặc ConcurrentHashMap sai. Khả năng kết hợp có ý nghĩa gần bằng 0.

+0

điều này là không chính xác. Có các trường hợp sử dụng âm thanh trong đó đối tượng trong một chuỗi cục bộ được chia sẻ bởi nhiều luồng. –

0

Ngoài những gì @aioobe cho biết, hãy xem xét trường hợp InheritableThreadLocal, trong đó giá trị của địa phương được chuyển từ chuỗi cho mỗi chuỗi con mà nó tạo.

Và như @pst cho biết, không có gì để ngăn chặn cùng một giá trị được sử dụng trong các trường hợp khác nhau (không kế thừa) ThreadLocal s.

Tóm lại, bạn phải phân tích kỹ lưỡng người dân địa phương, cách chúng được khởi tạo và cách chúng được sử dụng trước khi bạn có thể kết luận một cách an toàn rằng chúng không cần phải là chủ đề an toàn.

Các vấn đề liên quan