1. 程式人生 > >多執行緒之servlet執行緒安全

多執行緒之servlet執行緒安全

1、servlet是執行緒安全的嗎?

servlet天生就是多執行緒的,意思是一個請求,就會有一個執行緒來處理,但是其是否是執行緒安全的呢?下面通過實驗來證明。

編寫類:

<span style="font-size:18px;">package com.ht.action;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class TestServlet extends HttpServlet {
	private String username;
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		PrintWriter writer = null;
		try {
			writer = resp.getWriter();
			username = req.getParameter("name");
			System.out.println(this);
			System.out.println(Thread.currentThread().getName() + "-->" +username);
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			writer.write(username);
			writer.flush();
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			writer.close();
		}
	}
}
</span>

這個類主要獲取請求的name變數,然後再列印回瀏覽器,為了測試,其中讓執行緒睡眠10秒,開啟兩個瀏覽器訪問,

一個是:http://localhost:8888/testServlet?name=a

另一個是:http://localhost:8888/testServlet?name=b,最後發現兩個輸出都是b,證明了servlet不是執行緒安全的。當用戶傳送請求,容易會例項化servlet,並且只例項化一次,它是單列的,用這個單列來處理所有的請求。

2、struts2是執行緒安全的嗎?

用同樣的方法去驗證,其結果是,struts2時執行緒安全的。

每個請求,容器都會生成一個action例項化,所以他是執行緒安全的。

相關推薦

執行servlet執行安全

1、servlet是執行緒安全的嗎? servlet天生就是多執行緒的,意思是一個請求,就會有一個執行緒來處理,但是其是否是執行緒安全的呢?下面通過實驗來證明。 編寫類: <span style="font-size:18px;">package com.ht.

執行建立執行的方式之一:實現Callable介面(三)

對於多執行緒,大家並不陌生,對於如何建立執行緒也是輕車熟路,對於使用new thread和實現runable介面的方式,不再多說。這篇博文我們介紹第三種:實現Callable介面。 Callable介面 介面定義: @FunctionalInterface

執行建立執行的兩種方式

彩蛋:朕是小白,朕近段時間準備學一下有關執行緒方面的知識。(下面寫的東西是我對執行緒的一些理解)今天是2018年5月28號,朕準備每天更新一篇部落格來激勵自己一直學習,不要間斷,畢竟是位又懶自制力又差的傢伙,哈哈哈!言歸正傳,今晚準備詳細記錄一下執行緒建立的兩種方式以及這兩種

JAVA執行——常用執行

執行緒池 學習了執行緒池的基本原理後,可以理解執行緒池的型別控制,主要是通過中心池大小,和最大執行緒池大小,以及儲存工作任務的佇列決定。JDK中為我們封裝了常用的四種執行緒池。 在JDK幫助文件中,有如此一段話: “強烈建議程式設計師使用較為方便的Exec

C# 執行執行延時執行

using System; using System.Threading; namespace ConsoleApplication1 { class Program {

java執行啟動執行的三種方式

java對多執行緒有著良好的支援,java建立和啟動執行緒較為常用的方式有繼承Thread類、實現Runnable介面和匿名內部類的方式。 1.繼承Thread類: 通過繼承Thread類來建立並啟動多執行緒步驟如下: 1、定義Thread類的子類,並重寫該類的run(

java執行守護執行Daemon()和Join()介紹

最近看了些多執行緒相關的同樣的避免忘了:我們先模擬一個需求,在http請求的時候我們都會發心跳包,就會一遍又一遍的去檢查心跳是否存在,但是當這個請求不用的時候我們採取什麼方式來把它關閉掉呢?因為Stop的方法我們已經被java淘汰掉了.這時候我們可以拿守護執行緒來做著件事:p

java執行建立執行的三種方式優缺點

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。  一、繼承Thread類建立執行緒類  1.重寫run方法。該run()方法的方法體就代表了執行緒需要完成的任務。  2.建立Thread子類的例項。  3.呼叫執行緒物件的st

java執行守護執行(Daemon)

在Java中有兩類執行緒:User Thread(使用者執行緒)、Daemon Thread(守護執行緒)  用個比較通俗的比如,任何一個守護執行緒都是整個JVM中所有非守護執行緒的保姆: 只要當前JVM例項中尚存在任何一個非守護執行緒沒有結束,守護執行緒就全部工作;

java執行建立執行與死鎖

執行緒建立篇    java中的執行緒建立有多種方式,筆者(ymh)這裡分別根據執行緒執行完畢後是否有返回值討論執行緒建立的四種方式。 1、通過繼承Thread類重寫run方法(無返回值) 示例程式碼:

c++11執行執行與子執行資料傳輸與共享

c++執行緒間的資料傳輸與共享分很多種,而使用全域性變數是很常見的一種,下面先來看看最基礎的使用全域性變數進行資料共享的例子: #include<thread> #include<iostream> using namespace std; stat

執行實現執行的4種方式

什麼是執行緒,簡單的舉個例子 就拿我們的酒店服務員來說,如果只有一個服務員為客人服務的那麼可以把它理解為一個單執行緒工作,但隨著你客人的增加而導致一個服務員忙不過來,而這時你就要請多個服務員了為客人服務了,這個就可以理解成多執行緒工作,說到這裡我想大家都明白了執行緒的作用

java入門---環境設定以及執行例項如何執行指定class檔案目錄(classpath)

    如果我們 Java 編譯後的class檔案不在當前目錄,我們可以使用 -classpath 來指定class檔案目錄:C:> java -classpath C:\java\DemoCla

java虛擬機器位元組碼執行引擎解釋執行

java語言中,Javac編譯器完成了程式程式碼經過詞法分析,語法分析到抽象語法樹,再遍歷語法樹生成線性的位元組碼指令流的過程.這一部分動作是在java虛擬機器外部完成的,而直譯器是在虛擬機器內部的,Java程式的編譯是半獨立的實現. 直譯器負責對Javac編譯器輸出的指令

線程線程的安全問題

我們 pan 存在 進行 方式 ron span mut 線程   線程在執行過程中,通過cpu的調度,執行軌跡不確定,對共享資源的訪問很容易造成數據的錯誤。我們稱這個錯亂稱為線程安全問題。    同步概念     原子性操作:一個操作要麽一次性做完,

執行執行安全關鍵字synchronized

    synchronized關鍵字,是多執行緒程式設計時保證執行緒安全使用非常廣泛的java知識。下面我們學習下synchronized的相關知識: 實現原理     synchronized的實現原理是基於記憶體中的lock原則。記憶體模型中的變

Java基礎執行執行安全-同步鎖三種形式

首先,我們通過一個案例,演示執行緒的安全問題: 電影院要賣票,我們模擬電影院的賣票過程。假設要播放的電影是 “葫蘆娃大戰奧特曼”,本次電影的座位共100個(本場電影只能賣100張票)。我們來模擬電影院的售票視窗,實現多個視窗同時賣 “終結者”這場電影票(多個視窗一起賣這100張票)需要視窗

Python中的執行程式設計,執行安全與鎖(一) 聊聊Python中的GIL 聊聊Python中的GIL python基礎執行鎖機制 python--threading執行總結 Python3入門執行threading常用方法

1. 多執行緒程式設計與執行緒安全相關重要概念 在我的上篇博文 聊聊Python中的GIL 中,我們熟悉了幾個特別重要的概念:GIL,執行緒,程序, 執行緒安全,原子操作。 以下是簡單回顧,詳細介紹請直接看聊聊Python中的GIL  GIL:&n

C# 執行List的執行安全問題

網上關於List的執行緒安全問題將的很少,所以自己實驗了一把,發現確實是執行緒不安全的.所以當你在進行多執行緒程式設計中使用了共享的List集合,必須對其進行執行緒安全處理. List的Add方法是執行緒不安全的,List的原始碼中的Add方法,使用了每次噹噹前的元素達到上限,通過建立一個新的陣列例項,並給

[JDK] Java 執行 執行安全

Java 多執行緒 之 執行緒安全 多執行緒併發操作時資料共享如何安全進行? 執行緒安全與共享 多執行緒操作靜態變數(非執行緒安全) SynchronizedLockTest: /** * <p> * 測試類 * </p>