真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Servlet的線(xiàn)程安全問(wèn)題是什么

這篇文章主要介紹“Servlet的線(xiàn)程安全問(wèn)題是什么”,在日常操作中,相信很多人在Servlet的線(xiàn)程安全問(wèn)題是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Servlet的線(xiàn)程安全問(wèn)題是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

目前創(chuàng)新互聯(lián)已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、尋甸網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

Servlet體系結(jié)構(gòu)是建立在Java多線(xiàn)程機(jī)制之上的,它的生命周期是由Web容器負(fù)責(zé)的。

當(dāng)客戶(hù)端第一次請(qǐng)求某個(gè)Servlet時(shí),Servlet容器將會(huì)根據(jù)web.xml配置文件實(shí)例化這個(gè)Servlet類(lèi)。當(dāng)有新的客戶(hù)端請(qǐng)求該Servlet時(shí),一般不會(huì)再實(shí)例化該Servlet類(lèi),也就是有多個(gè)線(xiàn)程在使用這個(gè)實(shí)例。

這樣的話(huà),當(dāng)兩個(gè)或多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)同一個(gè)Servlet時(shí),可能會(huì)發(fā)生多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)同一資源的情況,數(shù)據(jù)可能會(huì)變得不一致,所以就很容易造成一系列的一些安全性問(wèn)題。

解決此類(lèi)的方法也有多

1、實(shí)現(xiàn) SingleThreadModel 接口

該接口指定了系統(tǒng)如何處理對(duì)同一個(gè)Servlet的調(diào)用。如果一個(gè)Servlet被這個(gè)接口指定,那么在這個(gè)Servlet中的service方法將不會(huì)有兩個(gè)線(xiàn)程被同時(shí)執(zhí)行,當(dāng)然也就不存在線(xiàn)程安全的問(wèn)題。這種方法只要繼承這個(gè)接口就行了

public class XXXXX extends HttpServlet implements SingleThreadModel { ………… }

2、同步對(duì)共享數(shù)據(jù)的操作

使用synchronized 關(guān)鍵字能保證一次只有一個(gè)線(xiàn)程可以訪(fǎng)問(wèn)被保護(hù)的區(qū)段,在本論文中可以通過(guò)同步塊操作來(lái)保證Servlet的線(xiàn)程安全。同步后的代碼如下:

Public class XXXXXX extends HttpServlet { ………… synchronized (this){XXXX} }

3、避免使用實(shí)例變量

線(xiàn)程安全問(wèn)題還有些是由實(shí)例變量造成的,只要在Servlet里面的任何方法里面都不使用實(shí)例變量,那么該Servlet就是線(xiàn)程安全的。

對(duì)上面的三種方法進(jìn)行測(cè)試,可以表明用它們都能設(shè)計(jì)出線(xiàn)程安全的Servlet程序。但是,如果一個(gè)Servlet實(shí)現(xiàn)了SingleThreadModel接口,Servlet引擎將為每個(gè)新的請(qǐng)求創(chuàng)建一個(gè)單獨(dú)的Servlet實(shí)例,這將引起大量的系統(tǒng)開(kāi)銷(xiāo)。SingleThreadModel在Servlet2.4中已不再提倡使用;同樣如果在程序中使用同步來(lái)保護(hù)要使用的共享的數(shù)據(jù),也會(huì)使系統(tǒng)的性能大大下降。這是因?yàn)楸煌降拇a塊在同一時(shí)刻只能有一個(gè)線(xiàn)程執(zhí)行它,使得其同時(shí)處理客戶(hù)請(qǐng)求的吞吐量降低,而且很多客戶(hù)處于阻塞狀態(tài)。另外為保證主存內(nèi)容和線(xiàn)程的工作內(nèi)存中的數(shù)據(jù)的一致性,要頻繁地刷新緩存,這也會(huì)大大地影響系統(tǒng)的性能。所以在實(shí)際的開(kāi)發(fā)中也應(yīng)避免或最小化Servlet 中的同步代碼;在Serlet中避免使用實(shí)例變量是保證Servlet線(xiàn)程安全的最佳選擇。從Java 內(nèi)存模型也可以知道,方法中的臨時(shí)變量是在棧上分配空間,而且每個(gè)線(xiàn)程都有自己私有的??臻g,所以它們不會(huì)影響線(xiàn)程的安全。

小結(jié)

Servlet的線(xiàn)程安全問(wèn)題只有在大量的并發(fā)訪(fǎng)問(wèn)時(shí)才會(huì)顯現(xiàn)出來(lái),并且很難發(fā)現(xiàn),因此在編寫(xiě)Servlet程序時(shí)要特別注意。線(xiàn)程安全問(wèn)題主要是由實(shí)例變量造成的,因此在Servlet中應(yīng)避免使用實(shí)例變量。如果應(yīng)用程序設(shè)計(jì)無(wú)法避免使用實(shí)例變量,那么使用同步來(lái)保護(hù)要使用的實(shí)例變量,但為保證系統(tǒng)的最佳性能,應(yīng)該同步可用性最小的代碼路徑。

到此,關(guān)于“Servlet的線(xiàn)程安全問(wèn)題是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


當(dāng)前題目:Servlet的線(xiàn)程安全問(wèn)題是什么
標(biāo)題URL:http://weahome.cn/article/ipieip.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部