線程安全是編程中的術(shù)語(yǔ),指某個(gè)方法在多線程環(huán)境中被調(diào)用時(shí),能夠正確地處理多個(gè)線程之間的共享變量,使程序功能正確完成。
Servlet 不是線程安全的,servlet 是單實(shí)例多線程的,當(dāng)多個(gè)線程同時(shí)訪問(wèn)同一個(gè)方法,是不能保證共享變量的線程安全性的。
Struts2 的 action 是多實(shí)例多線程的,是線程安全的,每個(gè)請(qǐng)求過(guò)來(lái)都會(huì) new 一個(gè)新的 action 分配給這個(gè)請(qǐng)求,請(qǐng)求完成后銷毀。
SpringMVC 的 Controller 是線程安全的嗎?不是的,和 Servlet 類似的處理流程。Struts2 好處是不用考慮線程安全問(wèn)題;Servlet 和 SpringMVC 需要考慮線程安全問(wèn)題,但是性能可以提升不用處理太多的 gc,可以使用 ThreadLocal 來(lái)處理多線程的問(wèn)題。