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