arraylist底層為啥線程不安全 spring bean class作用?
spring bean class作用?1.作用Bean標(biāo)簽是主要用于配置對(duì)象,讓spring來(lái)創(chuàng)建的。默認(rèn)情況下它動(dòng)態(tài)鏈接庫(kù)的是類中的無(wú)參構(gòu)造函數(shù)。如果沒(méi)有無(wú)參構(gòu)造函數(shù)則肯定不能創(chuàng)建成功。2.屬性i
spring bean class作用?
1.作用
Bean標(biāo)簽是主要用于配置對(duì)象,讓spring來(lái)創(chuàng)建的。
默認(rèn)情況下它動(dòng)態(tài)鏈接庫(kù)的是類中的無(wú)參構(gòu)造函數(shù)。如果沒(méi)有無(wú)參構(gòu)造函數(shù)則肯定不能創(chuàng)建成功。
2.屬性
id:給對(duì)象在容器中需要提供一個(gè)唯一標(biāo)志,用于資源對(duì)象。
class:指定你類的全時(shí)間限制類名,主要是用于反射創(chuàng)建家族對(duì)象。默認(rèn)情況下內(nèi)部函數(shù)無(wú)參構(gòu)造函數(shù)。
scope:指定你對(duì)象的作用范圍。
二、Bean標(biāo)簽的屬性
Bean標(biāo)簽中的scope屬性,用于請(qǐng)看bean的作用域。取值萬(wàn)分感謝:
singleton:默認(rèn)值,單例的。代表在Spring Ioc容器中只有一個(gè)Bean實(shí)例。
prototype:多例的。在這一刻從Spring容器中某些時(shí)都會(huì)直接返回另一個(gè)新的實(shí)例。
request:WEB項(xiàng)目中,Spring創(chuàng)建家族一個(gè)Bean的對(duì)象,將對(duì)象現(xiàn)金存入到request域中。
session:WEB項(xiàng)目中,Spring創(chuàng)建角色一個(gè)Bean的對(duì)象,將對(duì)象存進(jìn)到session域中。
globalsession:WEB項(xiàng)目中,作用于集群環(huán)境(Porlet)的會(huì)話范圍(全局會(huì)話范圍)。如果不是沒(méi)有集群環(huán)境(Portlet)那你globalSession相當(dāng)于session。
init-method:指定你類中的初始化方法名稱。
destroy-method:更改類中完全銷毀方法名稱。
三、Bean標(biāo)簽的scope屬性
scope屬性t那說(shuō)明
單例singletont對(duì)象只創(chuàng)建戰(zhàn)隊(duì)三次,容器修改時(shí)修改
原型prototypet每?jī)?nèi)部函數(shù)四次就創(chuàng)建角色另一個(gè)新的對(duì)象,對(duì)象調(diào)用時(shí)創(chuàng)建家族
requestt有時(shí)候HTTP幫忙時(shí)修改一個(gè)實(shí)例
sessiont因?yàn)槊總€(gè)HTPPsession創(chuàng)建一個(gè)實(shí)例
1.測(cè)試scope“singleton”
singleton:默認(rèn)值,單例的。代表在Spring Ioc容器中僅有一個(gè)Bean實(shí)例。
lt?xmlversion#341.0#34encoding#34UTF-8#34?r26
ltbeansxmlns##34
txmlns:xsi##34
txsi:schemaLocation##34a8
tltbeanid#34p#34class##34cgtlt/beangt
lt/beansgt
package
importorg.junit.Test
import
import
import
/**
*類那就證明:
*tt測(cè)試Bean標(biāo)簽的scope屬性
*@guoqianliang1998.
*/
stateclassDemo{
tpublicvoidtestScope(){
ttApplicationContextacnewClassPathXmlApplicationContext(#34applicationContext.xml#34)
ttPersonp1(Person)(#34p#34)
ttPersonp2(Person)(#34p#34)
ttPersonp3(Person)(#34p#34)
(p1)
(p2)
(p3)
t
“prototype”
prototype:多例的。每一道從Spring容器中獲取時(shí)都會(huì)返回另一個(gè)新的實(shí)例。
lt?xmlversion#341.0#34encoding#34UTF-8#34?a8
ltbeansxmlns##34
txmlns:xsi##34
txsi:schemaLocation##34dstrok
tltbeanid#34p#34class##34scope#34prototype#34gtlt/beangt
lt/beansgt
package
importorg.junit.Test
import
import
import
/**
*類說(shuō)明:
*tt測(cè)試Bean標(biāo)簽的scope屬性
*@guoqianliang1998.
*/
publicclassDemo{
tpublicvoidtestScope(){
ttApplicationContextacnewClassPathXmlApplicationContext(#34applicationContext.xml#34)
ttPersonp1(Person)(#34p#34)
ttPersonp2(Person)(#34p#34)
ttPersonp3(Person)(#34p#34)
(p1)
(p2)
(p3)
四、scope#34singleton#34給了的線程安全問(wèn)題
單例模式下,在對(duì)象實(shí)體類的成員位置通過(guò)修改加工改,很可能會(huì)誘發(fā)線程安全問(wèn)題。
而寫在函數(shù)內(nèi)部(局部位置)則肯定不會(huì)引發(fā)線程安全問(wèn)題,這是是因?yàn)閷?duì)象在這一瞬間調(diào)用函數(shù),都會(huì)在??臻g中界域空間,執(zhí)行函數(shù)完就解盟,生命周期短。
package
import
import
/**
*類說(shuō)明:
*tt實(shí)體類Person
*@guoqianliang1998.
*/
publicclassPerson{
tprivateStringname
t//要是對(duì)list參與增刪改,很可能影響到線程安全問(wèn)題。
tpublicListltStringgt list new ArrayListltStringgt()
t//無(wú)參構(gòu)造
tpublicPerson(){
t}
t//有參構(gòu)造
tpublicPerson(String name){
name
t}
tpublicvoidtalking(){
(#34talk方法...#34)
t}
}
vector和隊(duì)列有什么區(qū)別?
ArrayList和Vector的區(qū)別這兩個(gè)類都實(shí)現(xiàn)了List接口(List接口不能繼承了Collection接口),他們也是更加有序集合,即存儲(chǔ)位置在這兩個(gè)子集中的元素的位置是有順序的,應(yīng)該是一種相冊(cè)的數(shù)組,我們以后可以不按位置索引號(hào)收起某個(gè)元素,因此其中的數(shù)據(jù)是不能重復(fù)一遍的接著才說(shuō)ArrayList與Vector的區(qū)別,這主要注意除了兩個(gè)方面:
.
(1)同步性:Vector是線程安全的,也就是說(shuō)是它的方法之間是線程同步的,而ArrayList是線程序不安全的的,它的方法之間是線程不離線的。
如果沒(méi)有僅有一個(gè)線程會(huì)ftp訪問(wèn)到集合,那最好是是使用ArrayList,因?yàn)樗豢紤]到線程安全,效率會(huì)高些;如果沒(méi)有有多個(gè)線程會(huì)訪問(wèn)網(wǎng)絡(luò)到集合,那最好是建議使用Vector,畢竟不不需要我們自己再去確定和編譯程序線程安全的代碼。
(2)數(shù)據(jù)增長(zhǎng):ArrayList與Vector都有一個(gè)初始的容量大小,當(dāng)存儲(chǔ)位置進(jìn)它們里面的元素的個(gè)數(shù)將近了容量時(shí),就是需要提升ArrayList與Vector的存儲(chǔ)空間,你每次要減少存儲(chǔ)空間時(shí),并非只提高一個(gè)存儲(chǔ)單元,反而減少多個(gè)存儲(chǔ)單元,隔一段時(shí)間增強(qiáng)的存儲(chǔ)單元的個(gè)數(shù)在內(nèi)存空間利用與程序效率之間要全面的勝利一定的平衡。
Vector設(shè)置增漲為原來(lái)一倍,而ArrayList的增長(zhǎng)策略在文檔中沒(méi)有明確明確規(guī)定(從源代碼看到的是再增長(zhǎng)為原先的1.5倍)。ArrayList與Vector都是可以可以設(shè)置初始的空間大小,Vector還是可以系統(tǒng)設(shè)置增長(zhǎng)的空間大小,而ArrayList沒(méi)有提供給可以設(shè)置增長(zhǎng)空間的方法。歸納:即Vector增長(zhǎng)原來(lái)是的一倍,ArrayList增加以前的0.5倍。
很簡(jiǎn)單列個(gè)表格