Прежде чем говорить о безопасности нити Struts2, позвольте мне сначала поговорить о том, что такое безопасность ветки? Это то, что сказал сети.
Если ваш код находится в процессе, в котором вы находитесь, одновременно работает несколько потоков, и эти потоки могут одновременно запускать этот код. Если результат каждого прогона совпадает с результатом запуска одного потока, а значения других переменных одинаковы, как и ожидалось, он безопасен для потока.
То есть в процессе несколько потоков выполняются одновременно. Во время выполнения каждого потока значения переменных одинаковы, а результаты выполнения одинаковы, что безопасно. В противном случае нить небезопасна.
Затем просмотрите вопросы безопасности потоков сервлетов. Поскольку сервлеты являются режимом Singleton, будет создан только один экземпляр. Когда несколько пользователей запрашивают сервлет одновременно, Tomcat выведет несколько потоков для выполнения кода сервлета. Следовательно, сервлеты защищены нитью. При неправильном использовании могут возникнуть проблемы. Вот пример:
Пакет com.wang.servlet; импорт java.io.ioexception; импорт java.io.printwriter; импорт javax.servlet.servletexception; импорт javax.servlet.http.httpservlet; import javax.servlet.http.httpservecvelt; Class Threadsafeservlet расширяет httpservlet {private String name; // Определение публичного частного имени переменной public void doget (httpservletrequest, httpservletresponse response) Throws servletexception, ioexception {response.setContenttype ("text/html"); // Получить атрибут имени из имени поля запроса = request.getParameter ("name"); // позволить потоке спать в течение 10 секунд try {thread.sleep (10000); } catch (прерванное искусство e) {e.printstacktrace (); } // Выходное значение имени в браузер response.getWriter (). Print ("name ="+name); }}Мы используем два браузера для доступа к Threadsafeservlet? Name = "Zhangsan" и Threadsafeservlet? Name = "lisi" в течение десяти секунд. Результатами являются имя = lisi, что означает, что есть проблема с программой. Мультипоточное параллельное чтение и письмо приведут к данным из синхронизации. Поэтому при использовании сервлетов мы стараемся не определять глобальные частные атрибуты, а определять переменные в методах Doget () и Dopost () соответственно. Конечно, если это просто операция чтения, проблем не будет. Поэтому, если вы хотите определить глобальные атрибуты только для чтения в сервлетах, лучше определить окончательный тип.
Действие в Struts2 создает экземпляр для каждого запроса. Нет никакой разницы между действиями и обычными классами Java, и не будет никаких данных из синхронизации, поэтому оно безопасно.
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.