程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java struts2進修筆記之線程平安

java struts2進修筆記之線程平安

編輯:關於JAVA

java struts2進修筆記之線程平安。本站提示廣大學習愛好者:(java struts2進修筆記之線程平安)文章只能為提供參考,不一定能成為您想要的結果。以下是java struts2進修筆記之線程平安正文


在說struts2的線程平安之前,先說一下,甚麼是線程平安?這是一個網友講的。

假如你的代碼地點的過程中有多個線程在同時運轉,而這些線程能夠會同時運轉這段代碼。假如每次運轉成果和單線程運轉的成果是一樣的,並且其他的變量的值也和預期的是一樣的,就是線程平安的。

就是說,在一個過程中有多個線程並發履行,每一個線程履行進程中,變量值是雷同的,履行成果也是雷同的,就是線程平安的.不然就是線程不平安的.

然後回想一下servlet的線程平安成績,因為servlet是單例形式的,只會發生一個實例,當多個用戶同時要求一個servlet的時刻,Tomcat會派生出多個線程來履行servlet的代碼,是以servlet是線程不平安的,假如應用欠妥,能夠會湧現成績.上面貼一個例子:

package com.wang.servlet;

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;

public class ThreadSafeServlet extends HttpServlet {

  private String name;//界說一個公共的公有變量 name
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html");
    //從request域中獲得name屬性
    name =request.getParameter("name");
    //使線程休眠10秒
    try {
      Thread.sleep(10000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    //向閱讀器輸入name的值
    response.getWriter().print("name="+name);
  }

} 

我們在十秒內分離用兩個閱讀器拜訪ThreadSafeServlet?name="zhangSan"和ThreadSafeServlet?name="liSi",顯示的成果均為name=liSi,這就意味著法式湧現了成績,多線程並發的讀寫會招致數據分歧步的成績,所以我們在應用servlet的時刻盡可能不要界說全局的公有屬性,而是把變量分離界說到doGet()和doPost()辦法中去,固然假如僅僅是讀操作,是不會湧現成績的,是以假如要在servlet中界說全局的只讀屬性最好界說為final類型.

Struts2中的Action為每一個要求都創立一個實例,Action和通俗的java類沒有任何差別,不會湧現數據分歧步的情形,是以是線程平安的。
以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved