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

首頁 > 編程 > JSP > 正文

編寫線程安全的JSP應用程序

2024-09-05 00:20:42
字體:
來源:轉載
供稿:網友

  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在整個系統內被使用,所以不是線程安全的。

  局部變量

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

  靜態類

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

  外部資源:

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

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

  <%@ 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
91亚洲精品视频| 国产精品中文久久久久久久| 欧美成人第一页| 一区二区三区动漫| 欧美日韩国产在线看| 欧美视频裸体精品| 亚洲免费电影在线观看| 一区二区三区国产在线观看| 中文字幕亚洲在线| 欧美午夜精品久久久久久久| 日产精品久久久一区二区福利| 亚洲人午夜色婷婷| 久久久国产视频| 久久久久久久久中文字幕| 91九色单男在线观看| 色婷婷综合久久久久| 亚洲国产成人91精品| 欧美大成色www永久网站婷| 91po在线观看91精品国产性色| 亚洲高清一区二| 久久中文久久字幕| 午夜精品久久久久久久男人的天堂| 91精品在线影院| 97视频免费在线看| 美女999久久久精品视频| 91精品视频在线看| 欧美日韩国产在线播放| 亚洲欧美在线一区二区| 欧美日韩国产二区| 欧美中文在线视频| 亚洲的天堂在线中文字幕| 俺去亚洲欧洲欧美日韩| 精品久久久香蕉免费精品视频| 狠狠躁夜夜躁久久躁别揉| 国产性色av一区二区| 久久久久久一区二区三区| 日韩电影中文字幕在线观看| 一区二区三区亚洲| 亚洲精品自在久久| 精品无人区太爽高潮在线播放| 91在线播放国产| 亚洲天堂男人天堂| 中文字幕视频一区二区在线有码| 久久99国产精品自在自在app| 亚洲三级免费看| 欧美多人乱p欧美4p久久| 午夜精品福利在线观看| 97视频在线观看视频免费视频| 国产精品香蕉av| 韩国日本不卡在线| 2019中文在线观看| 精品亚洲永久免费精品| 深夜精品寂寞黄网站在线观看| 欧美最猛性xxxxx亚洲精品| 国产成人精品在线视频| 亚洲欧美国产一本综合首页| 国产一区二区在线免费| 揄拍成人国产精品视频| 97不卡在线视频| 成人午夜在线影院| 日韩69视频在线观看| 成人激情视频小说免费下载| 国产精品福利久久久| 精品小视频在线| www.日韩视频| 亚洲欧美一区二区精品久久久| 欧美电影免费观看网站| 国产亚洲精品高潮| 日韩电影免费观看在线观看| 日韩视频免费在线观看| 国产成人+综合亚洲+天堂| 欧美日韩性视频在线| 中文字幕久精品免费视频| 欧美大胆在线视频| 国产精品久久久久久久久免费看| 欧美福利视频网站| 在线电影欧美日韩一区二区私密| 欧美—级高清免费播放| 午夜精品视频网站| 国产精品白丝jk喷水视频一区| 国产成人短视频| 57pao成人国产永久免费| 久久久免费电影| 日本精品性网站在线观看| 国产精品女视频| 中日韩午夜理伦电影免费| 国产午夜精品理论片a级探花| 色综合影院在线| 日韩有码在线观看| 亚洲最大成人免费视频| 亚洲精品电影网在线观看| 国产精品激情自拍| 欧美精品videos另类日本| 亚洲电影免费观看高清完整版| 亚洲美女福利视频网站| 日韩视频免费观看| 日本久久久久久久久久久| 欧美成人免费全部观看天天性色| 中文字幕在线精品| 国产午夜精品一区理论片飘花| 国产69精品久久久久99| 91啪国产在线| 在线观看国产精品91| 中文字幕免费精品一区高清| 国产精品第一页在线| 亚洲成人网久久久| 在线日韩日本国产亚洲| 国产脚交av在线一区二区| 久久天堂av综合合色| 国产精品美女主播在线观看纯欲| www.日韩视频| 国产欧美韩国高清| 中文字幕亚洲综合久久| 欧洲美女免费图片一区| 国产亚洲人成网站在线观看| 亚洲午夜国产成人av电影男同| 国产精品69久久久久| 一区二区三区视频免费在线观看| 久久久99久久精品女同性| 久精品免费视频| 中文字幕日韩欧美精品在线观看| 一本色道久久88综合日韩精品| 欧美午夜精品在线| 中文国产亚洲喷潮| 亚洲欧美日韩精品久久亚洲区| 日本一区二区在线免费播放| 国产999精品久久久| 国产亚洲视频在线| 三级精品视频久久久久| 国产精品久久久久久久久久尿| 久久国产精品99国产精| 欧美超级乱淫片喷水| 日韩亚洲欧美中文在线| 亚洲va国产va天堂va久久| 国产精品视频999| 国产精品免费视频久久久| 日韩美女福利视频| 成人乱人伦精品视频在线观看| www日韩欧美| 国产免费成人av| 久久99久久99精品中文字幕| 成人黄色在线播放| 日韩av成人在线观看| 成人日韩av在线| 欧美电影免费观看高清| 乱亲女秽乱长久久久| 国产精品9999| 在线看福利67194| 亚洲a中文字幕| 欧美高清视频在线| 九九综合九九综合| 一本大道久久加勒比香蕉| 成人黄色短视频在线观看| 人体精品一二三区| 国产精品视频久久久久| 欧美黑人巨大精品一区二区| 性亚洲最疯狂xxxx高清| 国产精品av在线播放| 国内精品在线一区| 国产丝袜精品第一页| 国产精品一区二区久久精品| 国产日韩换脸av一区在线观看| 午夜精品久久久久久久白皮肤| 91亚洲va在线va天堂va国|