程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Servlet網上售票問題引發線程安全問題的思考

Servlet網上售票問題引發線程安全問題的思考

編輯:關於JSP

先分享相關代碼:

package com.lc.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 Ticketsell extends HttpServlet {


 public int ticket = 3;//假設只有三張票
 
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 PrintWriter out = response.getWriter();
 response.setContentType("text/html;charset=gbk");
 
 
 //簡單點而處理售票問題
 //當一個變量需要多個用戶共享,則應該在訪問該變量的時候加 同步機制
 //如果一個變量不需要共享則直接在doGet()和doPost()方法中定義即可,這樣的話就不存在線程的安全型問題
 
 
 synchronized (this) { //解決同步性問題的方法
  
  if(ticket > 0)
  {
  System.out.println("你買到票了!");
  out.println("你買到票了!");
  
  //休眠
  try {
   Thread.sleep(10*1000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  ticket--;
  }
  else
  {
  System.out.println("你沒有買到票!");
  out.println("你沒有買到票!");
  }
 }
 
 }

 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  
 this.doGet(request, response);

 }

}

運行結果如下:在不同的游覽器中同時訪問這個資源  在第三次之後顯示 票沒有了!

引發線程問題的思考,小編在之前的學習中也遇到過,現在線程問題有了一定的理解,希望大家也可以通過相關文章得到啟發。

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