您好,登錄后才能下訂單哦!
由于默認(rèn)情況下Servlet,在內(nèi)存中只有一個(gè)實(shí)例對(duì)象,當(dāng)多個(gè)瀏覽器并發(fā)訪問(wèn)Servlet時(shí)就有可能產(chǎn)生線程安全問(wèn)題
解決方案:
1、加鎖--效率降低 synchronized(this){ }
2、SingleThreadModel接口 -- 不能真的防止線程安全問(wèn)題
在服務(wù)器的內(nèi)部維護(hù)一個(gè)對(duì)象池,放servlet的對(duì)象,一個(gè)請(qǐng)求過(guò)來(lái),會(huì)到池里檢查一下有沒(méi)有這個(gè)servlet,如果沒(méi)有,創(chuàng)建一個(gè)給當(dāng)前線程使用,使用完的就放回池里。如果第一個(gè)線程使用的servlet對(duì)象還沒(méi)有還回池里,第二線程過(guò)來(lái)就會(huì)再創(chuàng)建一個(gè)servlet對(duì)象,兩個(gè)servlet對(duì)象會(huì)隨機(jī)被選中給第三個(gè)線程使用。
3、最終解決方案:
在Servlet中盡量少用類變量,如果一定要用類變量則用鎖來(lái)防止線程安全問(wèn)題,但是要注意鎖住內(nèi)容應(yīng)該是造成線程安全問(wèn)題的核心代碼,盡量的少鎖主內(nèi)容,減少等待時(shí)間提高servlet的響應(yīng)速度。
免責(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)容。