亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

編程技術:編寫線程安全的JSP程序

2024-09-05 00:19:54
字體:
來源:轉載
供稿:網友
中國最大的web開發資源網站及技術社區,

jsp默認是以多線程方式執行的,這是jsp與asp,php,perl等腳本語言不一樣的地方,也是它的優勢之一,但如果不注意多線程中的同步問題,會使所寫的jsp程序有難以發現的錯誤。下面以一個例子說明jsp中的多線程問題及解決方法。

一、jsp的中存在的多線程問題:

當客戶端第一次請求某一個jsp文件時,服務端把該jsp編譯成一個class文件,并創建一個該類的實例,然后創建一個線程處理client端的請求。如果有多個客戶端同時請求該jsp文件,則服務端會創建多個線程。每個客戶端請求對應一個線程。以多線程方式執行可大大降低對系統的資源需求,提高系統的并發量及響應時間.對jsp中可能用的的變量說明如下:

實例變量

實例變量是在堆中分配的,并被屬于該實例的所有線程共享,所以不是線程安全的.

jsp系統提供的8個類變量

jsp中用到的out,request,response,session,config,page,pageconxt是線程安全的,application在整個系統內被使用,所以不是線程安全的.

局部變量

局部變量在堆棧中分配,因為每個線程都有它自己的堆??臻g,所以是線程安全的.

靜態類

靜態類不用被實例化,就可直接使用,也不是線程安全的.

外部資源:

在程序中可能會有多個線程或進程同時操作同一個資源(如:多個線程或進程同時對一個文件進行寫操作).此時也要注意同步問題.

二、下面的例子存在的多線程問題:

<%@ page import=" javax.naming.*, java.util.*, java.sql.*, weblogic.common.* " %> <% string name string product; long  quantity; name=request.getparameter("name"); product=request.getparameter("product"); quantity=request.getparameter("quantity"); /*(1)*/ savebuy(); %> <%! public void  savebuy() {    /*進行數據庫操作,把數據保存到表中*/     try {       properties props = new properties();        props.put("user","scott");       props.put("password","tiger");       props.put("server","demo");         driver mydriver = (driver) iver").newinstance();       conn = mydriver.connect("jdbc:weblogic:oracle", props);       stmt = conn.createstatement();       string inssql = "insert into buy(empid, name, dept) values (?, ?, ?,?)";       stmt = conn.preparestatement(inssql);        stmt.setstring(1, name);       stmt.setstring(2, procuct);          stmt.setint(3, quantity);       stmt.execute();     }     catch (exception e)      {         system.out.println("sqlexception was thrown: " + e.getmessage());     }      finally //close connections and     {          try {           if(stmt != null)             stmt.close();           if(conn != null)             conn.close();         } catch (sqlexception sqle) {             system.out.println("sqlexception was thrown: " + sqle.getmessage());         }     } } %>

上面的程序模擬網上購物中的一部分,把用戶在瀏覽器中輸入的用戶名,購買的物品名稱,數量保存到表buy中。在savebuy()函數中用到了實例變量,所以它不是線程安全的.因為:程序中的每一條語句都不是原子操作,如name=request.getparameter("name");在執行是會對應多個機器指令,在任何時候都可能因系統調度而轉入睡眠狀態,讓其他的線程繼續執行.如果線程a在執行到(1)的時候轉入睡眠狀態,線程b開始執行并改變quantity的值,那么當又到a執行時,它會從調用savebuy()函數開始執行,這樣它保存到表中的quantity是被線程b改過的值,那么線程a對應的用戶所實際購買的數量與保持到表中的數據不一致.這是個很嚴重的問題.

三、解決方法

采用單線程方式

在該jsp文件中加上: ,使它以單線程方式執行,這時,仍然只有一個實例,所有客戶端的請求以串行方 式執行。這樣會降低系統的性能.

對函數savebuy()加synchronized進行線程同步,該jsp仍然以多線程方式執行,但也會降低系統的性能

public synchronized void savebuy()
{
......
}

采用局部變量代替實例變量,函數savebuy()聲明如下:

因為在savebuy()中使用的是傳給他的形參,是在堆棧中分配的,所以是線程安全的.

public void savebuy(string name,string product, int quantity)
{
......
}

調用方式改為:

<%

string name

string product;

long quantity;

name=request.getparameter("name");

product=request.getparameter("product");

quantity=request.getparameter("quantity");

savebuy(name,product,quantity)

%>

如果savebuy的參數很多,或這些數據要在很多地方用到,也可聲明一個類,并用他做參數,如:

public class buyinfo
{
string name;
string product;
long quantity;
}
public void savebuy(buyinfo info)
{
......
}

調用方式改為:

<%

buyinfo userbuy = new buyinfo();

userbuy.name=request.getparameter("name");

userbuy.product=request.getparameter("product");

userbuy.quantity=request.getparameter("quantity");

savebuy(userbuy);

%>

所以最好是用3,因為1,2會降低系統的性能.

多線程問題一般只有在在大并發量訪問時,才有可能出現,并且很難重復出現,所以應在編程時就時刻注意。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久国内精品在线| 97国产精品视频人人做人人爱| 一本大道久久加勒比香蕉| 日本精品久久电影| 国产精品99一区| 亚洲国产欧美日韩精品| 色多多国产成人永久免费网站| 日韩有码在线视频| 国产日韩精品入口| 理论片在线不卡免费观看| 丝袜一区二区三区| 亚洲国产欧美一区二区丝袜黑人| 92版电视剧仙鹤神针在线观看| 日韩成人久久久| 国产精品亚洲第一区| 国产亚洲精品91在线| 亚洲精品天天看| 久久久久北条麻妃免费看| 欧美电影免费观看网站| 亚洲国产成人在线视频| 欧美精品免费在线观看| 欧美成人亚洲成人| 精品久久久一区二区| 欧美有码在线观看视频| 国内揄拍国内精品| 国产精品福利观看| 欧美成aaa人片在线观看蜜臀| 欧美日在线观看| 精品亚洲国产成av人片传媒| 中国日韩欧美久久久久久久久| 欧美激情小视频| 一区二区国产精品视频| 亚洲精品福利资源站| 国产精品日韩在线观看| 国产精品一久久香蕉国产线看观看| 欧美性猛交99久久久久99按摩| 91精品啪在线观看麻豆免费| 色综合亚洲精品激情狠狠| 欧美在线视频一区二区| 日本久久亚洲电影| 欧美日韩免费在线| 欧美日韩电影在线观看| 在线亚洲欧美视频| 秋霞成人午夜鲁丝一区二区三区| 亚洲激情中文字幕| 欧美一级高清免费播放| 精品一区电影国产| 亚洲自拍欧美色图| 日本成人精品在线| 亚洲自拍小视频免费观看| 中文国产亚洲喷潮| 日韩欧美在线一区| 久久在线视频在线| 亚洲女人天堂成人av在线| 国产精品一区二区久久国产| 亚洲另类激情图| 久久99热精品| 欧美日本高清视频| 欧美在线亚洲一区| 91国内免费在线视频| 日本亚洲欧洲色α| 亚洲成人网在线观看| 亚洲欧美综合图区| 日韩av一区在线观看| 欧美第一黄网免费网站| 456亚洲影院| 欧美激情精品久久久久久| 精品成人在线视频| 国产黑人绿帽在线第一区| 国内精品久久影院| 欧美午夜宅男影院在线观看| 国产aⅴ夜夜欢一区二区三区| 九九九热精品免费视频观看网站| 国产视频久久久久久久| 青青a在线精品免费观看| 欧美激情第一页xxx| 69久久夜色精品国产69| 国产成人免费av电影| 美女性感视频久久久| 国产一区二区成人| 久久久成人的性感天堂| 66m—66摸成人免费视频| 成人激情视频网| 久久精品久久久久久国产 免费| 91po在线观看91精品国产性色| 久久激情五月丁香伊人| 一区二区三区美女xx视频| 性欧美激情精品| 最近更新的2019中文字幕| 秋霞午夜一区二区| 国产va免费精品高清在线| 亚洲va久久久噜噜噜久久天堂| 欧美日本国产在线| 奇米四色中文综合久久| 欧美丰满少妇xxxx| 国产在线精品一区免费香蕉| 欧美日韩性生活视频| 91精品免费看| 欧美性猛交99久久久久99按摩| 91精品久久久久久久久久入口| 亚洲国产精品福利| 国产乱肥老妇国产一区二| 日本中文字幕不卡免费| 国产精品久久77777| 国产精品一区二区三区免费视频| 欧亚精品在线观看| 日韩av高清不卡| 视频在线一区二区| 国产欧美精品日韩精品| 亚洲欧洲在线免费| 色噜噜狠狠狠综合曰曰曰88av| 日韩在线观看免费全集电视剧网站| 日韩中文字幕在线免费观看| 国产成人精品久久久| 97av视频在线| 在线成人免费网站| 久久人人爽人人爽人人片av高请| 久久久亚洲精品视频| 亚洲国产成人在线视频| 精品中文字幕视频| 亚洲www在线观看| 一区二区三区 在线观看视| 成人精品网站在线观看| 欧美日韩国产影院| 久久色精品视频| 中文字幕在线观看亚洲| 亚洲精品中文字| 欧美激情欧美激情在线五月| 国产mv免费观看入口亚洲| 亚洲欧美国产一区二区三区| 国产精品看片资源| 精品久久久久久久久久国产| 日韩高清电影免费观看完整版| 国产精品入口免费视| 久久久久久久色| 欧美中在线观看| 8x拔播拔播x8国产精品| 一本色道久久综合狠狠躁篇怎么玩| 第一福利永久视频精品| 亚洲香蕉成人av网站在线观看| 国产精品精品视频一区二区三区| 97超级碰在线看视频免费在线看| 国产一区二区三区在线| 日韩av在线导航| 欧美第一淫aaasss性| 欧美成人午夜激情| 亚洲人成在线观| 国产精品国产三级国产专播精品人| 欧美xxxx做受欧美.88| 精品国产91久久久久久| 国产精品网红福利| 欧美精品在线网站| 欧美一级淫片丝袜脚交| 亚洲国产91精品在线观看| 91地址最新发布| 国产日韩欧美视频在线| 日韩美女视频免费看| 亚洲国产成人精品久久久国产成人一区| 亚洲精品v欧美精品v日韩精品| 亚洲国产天堂网精品网站| 色妞欧美日韩在线| 成人黄色网免费| 国产精品伦子伦免费视频| 久久久久久国产精品|