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

首頁 > 編程 > Java > 正文

舉例講解Java中synchronized關鍵字的用法

2019-11-26 14:25:23
字體:
來源:轉載
供稿:網友

synchronized關鍵字顧名思義,是用于同步互斥的作用的。

這里精簡的記一下它的使用方法以及意義:

1. 當synchronized修飾 this或者非靜態方法或者是一個實例的時候,所同步的鎖是加在this或者實例對象引用上面的。比如a,b同為Main類的實例化對象,a調用被同步的方法,和b調用被同步的方法,沒有形成互斥。但是不同線程的a對象調用被同步的方法就被互斥了。

public synchronized void method(){   //…. } public void method() {   synchronized (this){     //…..   } }

2.與1不同,當synchronized修飾類名.class 或者靜態方法的時候. 就算是不同對象,也會形成互斥

Class Main {   public synchronized static void method1(){     //….   }   public void method2(){     synchronized(Main.class) //    } }

3.eg:

package com.asiainfolinkage.ems.web.controller.base;  import java.math.BigInteger; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Random;  import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;  /**  * 附帶token的控制器  * @version 1.0 Copyright 2013年7月29日 下午3:38:30  */ public abstract class TokenBaseController extends BaseController {    private static Map<String, String> springmvc_token = new HashMap<String, String>();    /** 生成一個唯一值的token */   public String generateGUID(HttpSession session) {     String token = "";     Date date = new Date();     synchronized (springmvc_token) {       try {         Object obj = session.getAttribute(Constants.SPRING_MVC_TOKENNAME);         if (obj != null)           springmvc_token = (Map<String, String>) session.getAttribute(Constants.SPRING_MVC_TOKENNAME);         token = new BigInteger(165, new Random()).toString(36).toUpperCase();         springmvc_token.put(Constants.DEFAULT_TOKEN_NAME + "." + token, token);         session.setAttribute(Constants.SPRING_MVC_TOKENNAME, springmvc_token);         Constants.TOKEN_VALUE = token;       } catch (IllegalStateException e) {         _log.error("generateGUID() mothod find bug,by token session...");       }     }     return token;   }    /** 驗證表單token值和session中的token值是否一致 */   public boolean validToken(HttpServletRequest request) {     String inputToken = getInputToken(request);      if (inputToken == null) {       _log.warn("token is not valid!inputToken is NULL");       return false;     }     HttpSession session = request.getSession();     Map<String, String> tokenMap = (Map<String, String>) session.getAttribute(Constants.SPRING_MVC_TOKENNAME);     if (tokenMap == null || tokenMap.size() < 1) {       _log.warn("token is not valid!sessionToken is NULL");       return false;     }     String sessionToken = tokenMap.get(Constants.DEFAULT_TOKEN_NAME + "." + inputToken);     if (!inputToken.equals(sessionToken)) {       _log.warn("token is not valid!inputToken='" + inputToken + "',sessionToken = '" + sessionToken + "'");       return false;     }     tokenMap.remove(Constants.DEFAULT_TOKEN_NAME + "." + inputToken);     session.setAttribute(Constants.SPRING_MVC_TOKENNAME, tokenMap);      return true;   }    /** 獲取表單中token值 */   private String getInputToken(HttpServletRequest request) {     Map params = request.getParameterMap();     if (!params.containsKey(Constants.DEFAULT_TOKEN_NAME)) {       _log.warn("Could not find token name in params.");       return null;     }     String[] tokens = (String[]) (String[]) params.get(Constants.DEFAULT_TOKEN_NAME);     if ((tokens == null) || (tokens.length < 1)) {       _log.warn("Got a null or empty token name.");       return null;     }     return tokens[0];   } } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林甸县| 七台河市| 内乡县| 类乌齐县| 平阴县| 开平市| 汨罗市| 台中县| 志丹县| 焉耆| 兴文县| 高碑店市| 闽清县| 平远县| 夹江县| 天门市| 乐安县| 卓资县| 怀仁县| 清镇市| 郓城县| 静海县| 民乐县| 南昌县| 清涧县| 留坝县| 呼图壁县| 庐江县| 渭南市| 昌平区| 营口市| 崇明县| 固始县| 惠东县| 汤阴县| 定结县| 兰西县| 祥云县| 海城市| 漳州市| 安乡县|