溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET線程安全與靜態(tài)變量的生命周期是什么

發(fā)布時(shí)間:2021-12-06 15:11:50 來(lái)源:億速云 閱讀:157 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“ASP.NET線程安全與靜態(tài)變量的生命周期是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ASP.NET線程安全與靜態(tài)變量的生命周期是什么”吧!

void Application_Start開(kāi)始

void Application_End結(jié)束的,本來(lái)這就是對(duì)的

今天要做一個(gè)全局的應(yīng)用,想確認(rèn)一下,在網(wǎng)上一找,我的天,說(shuō)什么的都有

大概分三種

1.Application_Start——Application_End

2.Session_Start——Session_End

3.類生命周期結(jié)束

我用4個(gè)機(jī)器做了一個(gè)測(cè)試發(fā)現(xiàn)靜態(tài)變量值一直是不變的,并沒(méi)有因?yàn)槠渌脩舻卿浂讳N毀,確認(rèn)應(yīng)該是Application級(jí)的

靜態(tài)類在***訪問(wèn)時(shí)會(huì)調(diào)用靜態(tài)構(gòu)造器創(chuàng)建類類型對(duì)象,類型對(duì)象的生存周期是整個(gè)應(yīng)用程序域的生存周期,也就說(shuō)被訪問(wèn)過(guò)的靜態(tài)類,只有它所在的應(yīng)用程序域被卸載時(shí)才會(huì)被卸載。

類的成員分為兩類,靜態(tài)成員(static member)和實(shí)例成員(instance member)。靜態(tài)成員屬于類,實(shí)例成員則屬于對(duì)象,即類的實(shí)例。

簡(jiǎn)單討論一下在一個(gè)類中使用靜態(tài)字段(static field)和靜態(tài)方法(static method)是否會(huì)有線程安全問(wèn)題。

我們?cè)谥? 靜態(tài)字段(static field)和靜態(tài)方法(static method)的調(diào)用是通過(guò)類來(lái)調(diào)用。靜態(tài)方法不對(duì)特定的實(shí)例操作,只能訪問(wèn)靜態(tài)成員。實(shí)例方法可對(duì)特定的實(shí)例操作,既能訪問(wèn)靜態(tài)成員,也能訪問(wèn)實(shí)例成員。

那么,在多線程中使用靜態(tài)方法是否有ASP.NET線程安全問(wèn)題?這要看靜態(tài)方法是是引起ASP.NET線程安全問(wèn)題要看在靜態(tài)方法中是否使用了靜態(tài)成員。

因?yàn)?,在多線程中使用同一個(gè)靜態(tài)方法時(shí),每個(gè)線程使用各自的實(shí)例字段(instance field)的副本,而共享一個(gè)靜態(tài)字段(static field)。所以說(shuō),如果該靜態(tài)方法不去操作一個(gè)靜態(tài)成員,只在方法內(nèi)部使用實(shí)例字段(instance field),不會(huì)引起安全性問(wèn)題。但是,如果該靜態(tài)方法操作了一個(gè)靜態(tài)字段,則需要靜態(tài)方法中采用互斥訪問(wèn)的方式進(jìn)行安全處理。

舉個(gè)簡(jiǎn)單的例子,我們使用的Console.WriteLine();中WriteLine()是Console.WriteLine類的靜態(tài)方法。

對(duì)于ASP.NET線程安全中, 多個(gè)客戶端訪問(wèn)服務(wù)器端, 這是一個(gè)多線程的例子.只要理解了原因,我們可以在三層架構(gòu)中的數(shù)據(jù)訪問(wèn)層中放心使用靜態(tài)方法(static method)來(lái)訪問(wèn)數(shù)據(jù)庫(kù).

靜態(tài)方法如果沒(méi)有使用靜態(tài)變量,則沒(méi)有線程安全問(wèn)題。

為什么呢?因?yàn)殪o態(tài)方法內(nèi)聲明的變量,每個(gè)線程調(diào)用時(shí),都會(huì)新創(chuàng)建一份,而不會(huì)共用一個(gè)存儲(chǔ)單元。每個(gè)線程都會(huì)創(chuàng)建自己的一份,因此不會(huì)有線程安全問(wèn)題

注意,靜態(tài)變量,由于是在類加載時(shí)占用一個(gè)存儲(chǔ)區(qū),每個(gè)線程都是共用這個(gè)存儲(chǔ)區(qū)的,所以如果在靜態(tài)方法里使用了靜態(tài)變量,這就會(huì)有線程安全問(wèn)題!

感謝各位的閱讀,以上就是“ASP.NET線程安全與靜態(tài)變量的生命周期是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)ASP.NET線程安全與靜態(tài)變量的生命周期是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI