SlideShare a Scribd company logo
1 of 18
如何開發Thread Safe的Java
Web程式
凌網科技 鄭穎駿
jiun.9023510@gmail.com
1
大綱
JavaWeb程式(Servlet)的生命週期介紹
多執行緒Thread Safe議題
如何做到Thread Safe
結語
Q&A
1
2
課程目標
希望與課者透過本課程能
了解JavaWeb程式的運作原理
了解NonThread Safe會出現的問題
知道如何達到Thread Safe的方式
2
3
Java Web程式(Servlet)的生命週期
介紹
init() service()* destroy()
From:www.jitendrazaa.com/blog/java/servlet/life-cycle-of-servlet
4
Java Web程式的生命週期介紹
使用者的請求交由多個Thread同時處理
From:www.javachain.com/servlet-life-cycle
5
Java Web程式的生命週期介紹
多個Thread同時執行動作
From:www.javaworld.com/article/2072798/java-web-development/write-thread-safe-servlets.html
6
Java Web程式的生命週期介紹
以jconsole實際觀察tomcat執行
7
多執行緒Thread Safe議題
一個簡單的Servlet對執行次數進行統計
請問若有三百個人同時連線一次,最後counter的內容會是?
A. 300
B. 1
C. 不一定
8
多執行緒Thread Safe議題
以jmeter模擬同時三百人連線
9
多執行緒Thread Safe議題
測試結果(出現 Race Condition)
當許多的process同時對同一資源進行存取和操作,
且執行的結果是依照特定的存取順序而有所不同
10
多執行緒Thread Safe議題
在Servlet以local變數傳遞參數的結果
11
多執行緒Thread Safe議題
Struts 1 Action, SpringMVC Controller也是多執行緒的
處理使用者請求的進入點(Servlet,Action,Controller)
不可使用local變數來儲存或傳遞使用者狀態
12
如何做到Thread Safe
不使用local變數來儲存或傳遞使用者狀態
13
如何做到Thread Safe
選擇二:使用synchronized避免同步執行
如何做到Thread Safe
選擇三:若使用Spring+Struts2透過設定
@Scope(“prototype”)使每次request產生新的
controller instance達Thread Safe效果
14
15
如何做到Thread Safe
多執行緒Throughput較佳,使用synchronized會限制處
理量
16
結語
Java Web程式會以多執行緒方式處理使用者請求, 需
考量Thread Safe議題
處理使用者請求的進入點(Servlet,Action,Controller)
不可使用local變數來儲存或傳遞使用者狀態(非使用
者相關的常數可使用)
有特定需求時可以使用synchronized達到Thread Safe,
但程式Throughput會降低
若Java Web程式遇到多人使用時使用者看到非自身資
料的情況,可檢查程式是否Non Thread Safe
16
17
Q&A
17

More Related Content

Similar to 如何開發Thread Safe的Java Web程式

000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
xzdbd
 
Java Web动态图表编程
Java Web动态图表编程Java Web动态图表编程
Java Web动态图表编程
yiditushe
 
2. java introduction
2. java introduction2. java introduction
2. java introduction
netdbncku
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
yiditushe
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Justin Lin
 
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
Medivh2011
 
Java 推荐读物
Java 推荐读物Java 推荐读物
Java 推荐读物
yiditushe
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南
yiditushe
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
ytsolar
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
dcshi
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
longhao
 

Similar to 如何開發Thread Safe的Java Web程式 (20)

000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
 
Java Web动态图表编程
Java Web动态图表编程Java Web动态图表编程
Java Web动态图表编程
 
2. java introduction
2. java introduction2. java introduction
2. java introduction
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹
 
一個微信專案從0到000的效能調教
一個微信專案從0到000的效能調教一個微信專案從0到000的效能調教
一個微信專案從0到000的效能調教
 
Class loader
Class loaderClass loader
Class loader
 
北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
 
Java 推荐读物
Java 推荐读物Java 推荐读物
Java 推荐读物
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
 

如何開發Thread Safe的Java Web程式