Khi tôi đọc Head First Servlet and JSP
, chúng nói rằng biến mẫu là không an toàn.Tại sao biến mẫu trong Servlet không an toàn theo luồng
Tôi không hiểu tuyên bố này quá nhiều. Ví dụ: Tôi có một servlet có tên là ActionServlet.java
. Mỗi lần, yêu cầu của mỗi người dùng được gửi đến máy chủ, vùng chứa sẽ tạo một chuỗi mới và tạo phiên bản ActionServlet
mới.
ActionServlet
có thể có cấu trúc:
public class ActionServlet extends HttpServlet {
// example of instance variable
Instance variable;
public void processRequest(HttpServletRequest request, HttpServletResponse response) {
// process something relating to instance variable
}
}
Vì vậy, bởi vì tất cả những chủ đề tạo ra một cá thể của lớp mới cho ActionServlet
, vì vậy tôi không thấy bất kỳ vấn đề ở đây. bởi vì các trường hợp của các luồng này tách biệt nhau.
Hãy tìm hiểu vấn đề khi sử dụng biến mẫu trong môi trường đa luồng.
Cảm ơn :)
Suy nghĩ về việc gọi cùng một phương thức trên cùng một đối tượng từ hai chuỗi. –
@DanielFischer Tôi không thể tưởng tượng ra cách mà thread khác nhau có thể sử dụng cùng một đối tượng vì: 1) biến này là private 2) Object của thread này luôn khác với thread khác (tôi nghĩ). Tôi có một mã mẫu ở trên. Vui lòng cho tôi biết rõ hơn. – hqt
@hqt: thùng chứa tạo một cá thể duy nhất của servlet, lưu trữ nó trong một số cấu trúc dữ liệu toàn cầu (ví dụ như bản đồ), và mỗi khi có yêu cầu, nó sẽ có servlet thích hợp (dựa trên đường dẫn của yêu cầu) từ bản đồ và gọi phương thức dịch vụ của nó. Thực tế là các trường của servlet là private thì không có bất kỳ ảnh hưởng nào. Các container thậm chí không quan tâm đến chúng. –