国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

最佳實踐:避免或最小化 Servlet 中的同步

2019-11-18 15:24:42
字體:
來源:轉載
供稿:網友

  要害字:Servlet,jsp

摘要

最小化 servlet 中同步的使用。因為 servlet 是多線程的,主要代碼路徑的同步會嚴重地且極為有害地影響性能。

建議

servlet 是多線程的。基于 servlet 的應用程序必須熟悉并適當地處理這一點。假如應用程序有很多大段的代碼是同步的,那么這個應用程序實際上就變成單線程的,而且吞吐量會顯著下降。

在 servlet 中不出現同步是最佳選擇,然而,假如應用程序設計無法避免同步,那么請使用“鎖對象(lock Object)”并且鎖定可用性最小的代碼路徑。請不要同步 servlet 的 service 方法或 doGet 以及 doPost 方法。這些方法是主要代碼路徑。同步這些方法或任何這些 servlet 方法之一將鎖定整個 servlet 實例。下列代碼顯示了一個使用“鎖對象”來保護 servlet 實例變量 numberOfRows 的示例。

最小同步代碼路徑

public class BpAllBadThingsServletsV1b extends HttpServlet
{
PRivate int numberOfRows = 0;
private javax.sql.DataSource ds = null;

private Object lockObject = new Object();

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Connection conn = null;
ResultSet rs = null;
PreparedStatement pStmt = null;
int startingRows = 0;

synchronize(lockObject)
{
startingRows = numberOfRows;
}
try
{
String employeeInformation = null;
conn = ds.getConnection("db2admin", "db2admin");
pStmt = conn.prepareStatement
("select * from db2admin.employee");
rs = pStmt.executeQuery();
}
catch (Exception es)
{
// Error handling code here
}
}
}

應被取代的方法

以下代碼顯示如何同步主要代碼路徑來保護稱為 numberOfRows 的 servlet 實例變量。

使用 javax.servlet.SingleThreadModel 仍是另一種保護 servlet 實例變量的方法,但最好還是避免使用這種方法。

下面的圖 1 顯示了同步的性能影響

鎖定主要代碼路徑:過度的同步

public class BpAllBadThingsServletsV1a extends HttpServlet
{
private int numberOfRows = 0;
private javax.sql.DataSource ds = null;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Connection conn = null;
ResultSet rs = null;
PreparedStatement pStmt = null;
int startingRows;

try
{
synchronized(this) // Locks out Most of the Servlet Processing
{
startingRows = numberOfRows;
String employeeInformation = null;
conn = ds.getConnection("db2admin", "db2admin");
pStmt = conn.prepareStatement
("select * from db2admin.employee");
rs = pStmt.executeQuery();
}
}
catch (Exception es)
{
// Error handling code here
}
}
}

參考資料

WebSphere application Server Development Best Practices for Performance and Scalability
作者

Harvey W. Gunther 是 IBM 在北卡羅萊納州 Raleigh 的 WebSphere 產品開發小組中的資深性能分析師。可以通過 hgunther@us.ibm.com 與他聯系。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永嘉县| 海城市| 苗栗县| 来凤县| 游戏| 阿瓦提县| 甘肃省| 贡嘎县| 连南| 克什克腾旗| 新田县| 白水县| 阳江市| 夏邑县| 英德市| 娱乐| 长垣县| 尤溪县| 时尚| 历史| 鄂托克前旗| 岳池县| 卓尼县| 大港区| 天津市| 隆德县| 玛沁县| 乐业县| 台山市| 遂昌县| 化隆| 会理县| 中山市| 崇礼县| 丰都县| 博野县| 游戏| 嘉黎县| 玉门市| 保德县| 富裕县|