Struts1酌泰,Struts2,springmvc匕累,servlet線程安全問題

Struts1線程不安全

/**
  * <p>Return an <code>Action</code> instance that will be used to process
  * the current request, creating a new one if necessary.</p>
  *
  * @param request  The servlet request we are processing
  * @param response The servlet response we are creating
  * @param mapping  The mapping we are using
  * @return An <code>Action</code> instance that will be used to process
  *         the current request.
  * @throws IOException if an input/output error occurs
  */
 protected Action processActionCreate(HttpServletRequest request,
     HttpServletResponse response, ActionMapping mapping)
     throws IOException {
     // Acquire the Action instance we will be using (if there is one)
     String className = mapping.getType();
     if (log.isDebugEnabled()) {
         log.debug(" Looking for Action instance for class " + className);
     }
     Action instance;
     // 這個同步快保證了Action的單例
     synchronized (actions) {
         // Return any existing Action instance of this class
         instance = (Action) actions.get(className);
         if (instance != null) {
             if (log.isTraceEnabled()) {
                 log.trace("  Returning existing Action instance");
             }
             return (instance);
         }
         // Create and return a new Action instance
         if (log.isTraceEnabled()) {
             log.trace("  Creating new Action instance");
         }
         try {
             instance = (Action) RequestUtils.applicationInstance(className);
             // Maybe we should propagate this exception
             // instead of returning null.
         } catch (Exception e) {
             log.error(getInternal().getMessage("actionCreate",
                     mapping.getPath()), e);
             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                 getInternal().getMessage("actionCreate", mapping.getPath()));
             return (null);
         }
         actions.put(className, instance);
         if (instance.getServlet() == null) {
             instance.setServlet(this.servlet);
         }
     }
     return (instance);
 }

在一個應用的生命周期中陵刹,Struts框架只會為每個Action類創(chuàng)建一個Action實例(與servlet是一樣的)。所有的客戶請求共享一個Action實例欢嘿,并且所有請求線程可以同時執(zhí)行它的execute()方法衰琐。
所以,每個action只有一個實例际插, 在action打印this也可以看到碘耳, 確實是一樣的,
所以框弛,
不要在Action里面使用全局變量記憶數(shù)據(jù), 沒有意義而且不安全

Struts2線程安全

因為每次處理一個請求捕捂,struts就會實例化一個對象

如果在spring注入action時使用了單例瑟枫,也會導致線程不安全

對于使用過SpringMVC和Struts2的人來說,大家都知道SpringMVC是基于方法的攔截指攒,而Struts2是基于類的攔截慷妙。

對于Struts2來說,因為每次處理一個請求允悦,struts就會實例化一個對象膝擂;這樣就不會有線程安全的問題了;
而Spring的controller默認是Singleton的,這意味著每一個request過來隙弛,系統(tǒng)都會用原有的instance去處理架馋,這樣導致兩個結果:
一是我們不用每次創(chuàng)建Controller,二是減少了對象創(chuàng)建和垃圾收集的時間;由于只有一個Controller的instance全闷,當多個線程調用它的時候叉寂,它里面的instance變量就不是線程安全的了,會發(fā)生竄數(shù)據(jù)的問題总珠。

servlet和springmvc都是線程不安全

<b>如果要讓struts1屏鳍,springmvc勘纯,servlet都變成線程安全該怎么做<b/>
1.與Spring集成@Scope("prototype"),對應每次請求產(chǎn)生一個新的action實例钓瞭。
2.加鎖

當然這些討論都針對實例變量驳遵,如果action中共享的是靜態(tài)變量,單例不單例都線程不安全了山涡。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末超埋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佳鳖,更是在濱河造成了極大的恐慌霍殴,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件系吩,死亡現(xiàn)場離奇詭異来庭,居然都是意外死亡,警方通過查閱死者的電腦和手機穿挨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門月弛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人科盛,你說我怎么就攤上這事帽衙。” “怎么了贞绵?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵厉萝,是天一觀的道長。 經(jīng)常有香客問我榨崩,道長谴垫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任母蛛,我火速辦了婚禮翩剪,結果婚禮上,老公的妹妹穿的比我還像新娘彩郊。我一直安慰自己前弯,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布秫逝。 她就那樣靜靜地躺著恕出,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筷登。 梳的紋絲不亂的頭發(fā)上剃根,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音前方,去河邊找鬼狈醉。 笑死廉油,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的苗傅。 我是一名探鬼主播抒线,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渣慕!你這毒婦竟也來了嘶炭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤逊桦,失蹤者是張志新(化名)和其女友劉穎眨猎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體强经,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡睡陪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了匿情。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兰迫。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炬称,靈堂內(nèi)的尸體忽然破棺而出汁果,到底是詐尸還是另有隱情,我是刑警寧澤玲躯,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布据德,位于F島的核電站,受9級特大地震影響府蔗,放射性物質發(fā)生泄漏晋控。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一姓赤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仲吏,春花似錦不铆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至许帐,卻和暖如春劳坑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背成畦。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工距芬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涝开,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓框仔,卻偏偏與公主長得像舀武,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子离斩,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容