2012-10-04 37 views
20

Tôi đang nghiên cứu xem Javamail có an toàn theo chủ đề hay không, đặc biệt trong một tình huống có nhiều phiên tương ứng với người dùng khác nhau, một số máy chủ SMTP và sử dụng tạo tin nhắn MIME và sử dụng phương thức transport.sendMessage. Tôi biết Javamail được định hướng theo hướng sử dụng máy tính để bàn khiến tôi nghi ngờ rằng nó có thể không được xây dựng với luồng trong tâm trí, và tôi tự hỏi nếu có ai có kinh nghiệm như vậy.An toàn trong Javamail

Trả lời

53

Phải thừa nhận rằng các quy tắc an toàn của luồng cho JavaMail không được ghi lại đầy đủ, nhưng hy vọng chúng chủ yếu phù hợp với những gì bạn mong đợi.

Nhiều chủ đề có thể sử dụng Phiên.

Vì Transport vận hành kết nối đến máy chủ thư và chỉ một luồng duy nhất có thể sử dụng kết nối cùng lúc, Transport sẽ đồng bộ hóa truy cập từ nhiều luồng để duy trì an toàn luồng, nhưng bạn thực sự chỉ muốn sử dụng nó từ một sợi đơn.

Tương tự, một Cửa hàng có thể được sử dụng bởi nhiều luồng, nhưng truy cập vào kết nối cơ bản sẽ được đồng bộ hóa và đơn luồng.

Mỗi lần chỉ nên sửa đổi một chuỗi, nhưng nhiều chuỗi sẽ có thể đọc thư một cách an toàn (mặc dù không rõ vì sao bạn muốn làm điều đó).

Hy vọng rằng sẽ giúp ...

+0

Bạn có học được điều này từ nguồn javadoc, từ nguồn kinh nghiệm không? – ewernli

+32

Tôi đã viết nhiều mã và tôi duy trì tất cả. –

+2

Kudo! Vì không có tài liệu tham khảo nào ủng hộ các giải thích của bạn, tôi đã tự hỏi làm thế nào bạn có thể quyết đoán như vậy. Bây giờ tôi hiểu;) Rõ ràng, +1! – ewernli

1

Chủ đề điều phối javamail dường như không hết thời gian chờ nếu máy chủ không phản hồi kịp thời. điều này dẫn đến khóa trên tất cả các chủ đề có sẵn.

Đã kiểm tra hành vi này với cả 1.4.3 & 1.4.5.