Como o nome sugere, a palavra -chave sincronizada é usada para sincronizar a exclusão mútua.
Aqui vou registrar brevemente seu uso e significado:
1. Quando sincronizado modificar este ou um método não estático ou uma instância, o bloqueio sincronizado é adicionado a esta referência do objeto ou da instância. Por exemplo, A e B são objetos instantados da classe principal. A chama o método sincronizado, e B chama o método sincronizado e não forma um mutuamente exclusivo. No entanto, as chamadas de método sincronizado de um objeto de diferentes encadeamentos são mutuamente exclusivas.
public sincronizado Void Method () {//…. } public void method () {sincronizado (this) {//… ..}}2. Ao contrário de 1, quando sincronizado modifica o nome da classe. Classe ou método estático, até objetos diferentes se formam mutuamente exclusivos.
Classe Main {public sincronizado estático void Method1 () {//…. } public void method2 () {sincronizado (main.class) //}} 3.Eg:
pacote com.asiainfolinkage.ems.web.controller.base; importar java.math.biginteger; importar java.util.date; importar java.util.hashmap; importar java.util.map; importar java.util.random; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpSession; / *** Controlador com token* @Version 1.0 Copyright 29 de julho de 2013 às 15:38:30*/ public abstract classe TokenBaseController estende Basecontroller {Map estático privado <String, Stringmvc_token = new Hashmap <String, String> (); / ** Gere um token com um valor exclusivo*/ public String GeneRateGuid (sessão httpSession) {string token = ""; Data data = new Date (); sincronizado (springmvc_token) {try {objeto obj = session.getAttribute (constantes.spring_mvc_tokenname); if (obj! = null) springmvc_token = (map <string, string>) session.getAttribute (constantes.spring_mvc_tokenname); token = new biginteger (165, novo aleatório ()). ToString (36) .touppercase (); springmvc_token.put (constantes.default_token_name + "." + token, token); session.setAttribute (constantes.spring_mvc_tokenname, springmvc_token); Constants.token_value = token; } catch (ilegalStateException e) {_log.error ("geneRateguid () Mothod Encontre bug, por sessão de token ..."); }} retornar token; } / ** Verifique se o valor do token do formulário e o valor do token na sessão são consistentes* / public boolean ValidToken (httpServletRequest Request) {string inputToken = getInputToken (request); if (inputToken == null) {_log.warn ("Token não é válido! InputToken é nulo"); retornar falso; } HttpSession Session = request.getSession (); Mapa <string, string> tokenmap = (map <string, string>) session.getAttribute (constantes.spring_mvc_tokenname); if (tokenmap == null || tokenmap.size () <1) {_log.warn ("O token não é válido! SessionToken é nulo"); retornar falso; } String sessionToken = tokenmap.get (constantes.default_token_name + "." + InputToken); if (! inputToken.equals (sessionToken)) {_log.warn ("Token não é válido! InputToken = '" " + inputToken +"', sessionToken = '" + sessionToken +"' "); retornar falso; } tokenmap.remove (constantes.default_token_name + "." + inputToken); session.setAttribute (constantes.spring_mvc_tokenname, tokenmap); retornar true; } / ** Obtenha o valor do token no formulário* / private string getInputToken (httpServletRequest Request) {map params = request.getParameterMap (); if (! params.containsKey (constantes.default_token_name)) {_log.warn ("não conseguiu encontrar o nome do token em parâmetros."); retornar nulo; } String [] tokens = (string []) (string []) params.get (constantes.default_token_name); if ((tokens == null) || (tokens.length <1)) {_log.warn ("Obteve um nome de token nulo ou vazio."); retornar nulo; } retornar tokens [0]; }}