|
Session是非線程安全的,生命周期比較短,代表和數(shù)據(jù)庫(kù),在B/S系統(tǒng)一般不會(huì)超過(guò)一個(gè)請(qǐng)求, 內(nèi)部維護(hù)一級(jí)緩存和數(shù)據(jù)庫(kù)連接,如果session開(kāi)啟的時(shí)間過(guò)長(zhǎng),會(huì)長(zhǎng)時(shí)間占用緩存和數(shù)據(jù)庫(kù)連接池 SessionFactory是線程安全的,一個(gè)線程在使用的話其他線程必須得等待 String,Interger等不能修改的類,也是線程安全的,String的substring會(huì)產(chǎn)生一個(gè)新的對(duì)象,原來(lái)的對(duì)象時(shí)不會(huì)變的; 即每一個(gè)線程自己用自己的對(duì)象,不會(huì)出現(xiàn)數(shù)據(jù)混亂的情況; 另外一種只讀的類也是線程安全的,假設(shè)有個(gè)JavaBean只提供了getXX方法,沒(méi)有setXX大家都只會(huì)讀,不會(huì)修改數(shù)據(jù),也是線程安全的類 大家知道servlet,filter,包括擴(kuò)struts1里面的Action,都是單例模式的,即web容器啟動(dòng)之后這些類只會(huì)創(chuàng)建一個(gè)對(duì)象,但每來(lái)一個(gè)請(qǐng)求Web容器就創(chuàng)建一個(gè)線程,然后呢把這寫對(duì)象傳給它讓它去處理,這樣就會(huì)有多個(gè)線程同時(shí)去訪問(wèn)一個(gè)實(shí)例的問(wèn)題,這個(gè)時(shí)候在一個(gè)實(shí)例里面就不能夠定義這種即能讀又能寫的屬性;假如struts1里面的Action里面定義一個(gè)變量來(lái)記錄這個(gè)Action被使用了多少次 即: class MyAction Extends Action { private int count; public String execute() { count++; } } 可讀的,假如說(shuō)上面的count 改為:final 類型的,程序中只用它,不修改它這樣的程序是不會(huì)存在問(wèn)題的: class MyAction Extends Action{ private final int count; public String execute() { int b=count; } } 在struts2里面Action是多實(shí)例的,每來(lái)一個(gè)請(qǐng)求web容器就創(chuàng)建一個(gè)線程,但是會(huì)給每一個(gè)線程創(chuàng)建一個(gè)對(duì)象 所以在struts2的Action里面可以定義很多的成員變量,(其實(shí)回憶一下使用struts2時(shí),我們沒(méi)有了FormBean而是把所有的屬性都放在了Action當(dāng)中去了 |
|
|
來(lái)自: 昵稱22369024 > 《IT技術(shù)》