由于,一般情況下系統(tǒng)只生成servlet的單一實(shí)例,之后,為每個(gè)用戶請(qǐng)求創(chuàng)建新的線程。這樣的話,可能出現(xiàn)多個(gè)線程并發(fā)地訪問同一個(gè)servlet對(duì)象。
原則上可以實(shí)現(xiàn)SingleThreadModel,可以保證不會(huì)有多個(gè)請(qǐng)求線程同時(shí)訪問該單個(gè)實(shí)例。但是這不是個(gè)好選擇。
原因一,如果servlet被頻繁訪問,那么同步會(huì)對(duì)性能造成極大的等待時(shí)間。
原因二,現(xiàn)在服務(wù)器可以使用多個(gè)實(shí)例來處理請(qǐng)求,這樣的話仍然會(huì)出現(xiàn)并發(fā)訪問的問題。
一個(gè)好的方案,就是明確地同步對(duì)代碼的訪問。
synchronized(this){
................
}
原則上可以實(shí)現(xiàn)SingleThreadModel,可以保證不會(huì)有多個(gè)請(qǐng)求線程同時(shí)訪問該單個(gè)實(shí)例。但是這不是個(gè)好選擇。
原因一,如果servlet被頻繁訪問,那么同步會(huì)對(duì)性能造成極大的等待時(shí)間。
原因二,現(xiàn)在服務(wù)器可以使用多個(gè)實(shí)例來處理請(qǐng)求,這樣的話仍然會(huì)出現(xiàn)并發(fā)訪問的問題。
一個(gè)好的方案,就是明確地同步對(duì)代碼的訪問。
synchronized(this){
................
}