麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JSP > 正文

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

2019-11-02 14:37:11
字體:
來源:轉載
供稿:網友

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

  局部變量

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

  靜態類

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

  外部資源:

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

  二、下面的例子存在的

好看的爆笑圖片[www.62-6.com/1/baoxiaotupian]
多線程問題:

  <%@ 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開始執行并改變QUANT

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 香蕉国产在线视频 | 蜜桃一本色道久久综合亚洲精品冫 | 狠狠一区二区 | 成人精品一区二区三区中文字幕 | 国产精品久久久久久久成人午夜 | 91福利社在线 | 国产日韩在线观看一区 | 国产交换3p国产精品 | 中文字幕电影免费播放 | 日本黄色一级视频 | 毛片天天看 | h网站在线观看 | 久久久www视频| www久久久久久 | 色婷婷久久久亚洲一区二区三区 | 日韩免费黄色 | 中文字幕欧美专区 | 黄色成年在线观看 | 91九色视频在线播放 | 黄色av免费网站 | 干少妇av | 国产精品亚洲精品久久 | 日本欧美中文字幕 | 国产二三区 | 看一级毛片 | 欧美成人国产va精品日本一级 | 色交视频| 国产二区三区四区 | 九一国产精品 | 国产精品久久久久影院老司 | 国产精品三级a三级三级午夜 | 一区二区三区在线观看免费 | 92自拍视频 | 成人三级电影网站 | 国产精品视频免费在线观看 | 亚洲精久久 | 午夜精品福利视频 | 麻豆视频国产在线观看 | 亚洲国产午夜精品 | 久久亚洲精品国产 | 中文字幕激情 |