<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

        明月松間照 清泉石上流


                                            ——— 兵臨城下   貓科動物
    posts - 70, comments - 137, trackbacks - 0, articles - 23
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    關于實例變量和靜態變量

    Posted on 2007-01-25 20:29 兵臨城下 閱讀(1390) 評論(0)  編輯  收藏 所屬分類: Java EE
    ???????????(以下所述只在WEB程序中)
    ??????????近期在項目調試時遇到一個關于Servlet的實例變量的問題,由于Servlet是多線程的,所以Servlet的實例變量是非線程安全的,在項目調試中出現多線程的同步問題。
    ?????????由于Web容器維護的Servlet在容器中只會創建一個實例,也就單例模式。Servlet多線程運行,則實例變量是多線程共享的,存在隱患,但很難發現!
    ?????????下面來說一下這個問題,比較離奇:
    ?????????原先的jsp頁面中,存在一個Hidden的Iframe來實現頁面上菜單聯動的功能,一直運行良好。最近把iframe去掉了,改用ajax來實現。在下拉菜單onchange時,同時發出三個請求,調用同一個servlet,在這個Servlet中存在一個實例變量來返回數據,由于線程變量是非線程安全的,所以出現了bug,這個bug很隱秘,不是每次都能測試出來。
    ?????????在這里我不想討論iframe和ajax的好壞,只是想討論一下實例變量和靜態變量。
    ?????????靜態變量大家肯定比較熟悉,使用靜態變量就是為了維護一個狀態,使得可以讓多實例共享這個變量,我們可以用它來實現一些類似緩存的功能。現在如果這個類的實現是一個單例的模式,那么靜態變量就失去了優勢。單例,那就意味著只能多線程使用,那么多線程中實例變量就是多線程共享的(非線程安全),此時實例變量的作用類似于靜態變量了。
    ?????????是不是可以這樣說,單例模式中可以用實例變量來實現靜態變量的功能呢???現在Spring中默認的都是單例模式(singleton)。
    ?????????但是個人觀點,不提倡使用實例變量,畢竟非線程安全。如果一定要使用的話,個人觀點只用實例變量來維護一些web資源(緩存功能,如xml資源等等,公司項目中有很多這樣的情況),不能在這個類中頻繁使用它,不安全(我遇到的就是這樣一個問題)。
    ?????????純屬個人觀點,歡迎大家發表意見,討論一下!
    主站蜘蛛池模板: 中文字幕视频免费| 我想看一级毛片免费的| 91亚洲精品自在在线观看| 国内自产拍自a免费毛片| 高清免费久久午夜精品| 久热综合在线亚洲精品| 女人被弄到高潮的免费视频| 国产午夜无码片免费| 亚洲免费观看网站| 中文字幕精品无码亚洲字| 84pao强力永久免费高清| 免费激情网站国产高清第一页| 麻豆亚洲av熟女国产一区二| 亚洲AV无码一区二区三区国产| 亚洲大片免费观看| WWW国产成人免费观看视频| 亚洲91精品麻豆国产系列在线| 日日噜噜噜噜夜夜爽亚洲精品 | 24小时免费看片| 美女被爆羞羞网站免费| 亚洲最新中文字幕| 国产亚洲av片在线观看播放| 国产一区在线观看免费| 国产啪精品视频网免费| 久久免费国产视频| 一级做a爰片久久毛片免费看| 亚洲国产精品成人久久久| 亚洲三区在线观看无套内射| 国产在线观看免费不卡 | 亚洲精品成人av在线| 亚洲国产黄在线观看| 四虎成人精品一区二区免费网站| 国产精品白浆在线观看免费| 国产成人无码免费网站| 中文字幕在线日亚洲9| 亚洲色图.com| 亚洲国产精品久久久久网站| 亚洲综合在线另类色区奇米| 免费观看四虎精品国产永久| 免费黄色网址入口| 毛片免费在线播放|