Comme son nom l'indique, le mot-clé synchronisé est utilisé pour synchroniser l'exclusion mutuelle.
Ici, j'enregistrerai brièvement son utilisation et sa signification:
1. Lorsque Synchronisé Modifiez cette méthode ou une instance non statique ou une instance, le verrou synchronisé est ajouté à ceci ou à la référence d'objet d'instance. Par exemple, A et B sont tous deux des objets instanciés de la classe principale. A appelle la méthode synchronisée et B appelle la méthode synchronisée et ne forme pas un mutuellement exclusif. Cependant, les appels de méthode synchronisés d'un objet de différents threads s'excluent mutuellement.
Méthode void synchronisée publique () {//…. } Méthode publique void () {synchronisée (this) {//… ..}}2. Contrairement à 1, lorsque la synchronisation modifie le nom de classe. CLASSE ou MÉTHODE STATIQUE, même différents objets formeront des exclusivités mutuellement.
Classe Main {public synchronisé statique void méthode1 () {//…. } public void method2 () {synchronisé (main.class) //}} 3.EG:
package com.asiainfolinkage.ems.web.controller.base; import java.math.biginteger; Importer java.util.date; import java.util.hashmap; importation java.util.map; import java.util.random; Importer javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpSession; / ** * Contrôleur avec jeton * @version 1.0 Copyright 29 juillet 2013 à 15:38:30 PM * / Classe abstraite publique TokenBaseController étend BaseController {Private Static Map <String, String> SpringMvc_Token = new Hashmap <String, String> (); / ** Générez un jeton avec une valeur unique * / public String generateguid (HttpSession Session) {String token = ""; Date de date = new Date (); synchronisé (springmvc_token) {try {objet 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 + "." + jeton, jeton); session.setAttribute (constants.spring_mvc_tokenname, springmvc_token); Constants.token_value = token; } catch (illégalStateException e) {_log.Error ("generateguid () miothod se retrouve bug, par session token ..."); }} return token; } / ** Vérifiez si la valeur de jeton de formulaire et la valeur de jeton dans la session sont cohérentes * / public boolean validToken (requête httpservletRequest) {String inputToken = getInputToken (request); if (inputToken == null) {_log.warn ("Le token n'est pas valide! InputToken est null"); retourne 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 n'est pas valide! SessionToken est null"); retourne false; } String sessiontoken = tokenmap.get (constants.default_token_name + "." + InputToken); if (! inputToken.equals (sessionToken)) {_Log.warn ("Le token n'est pas valide! InputToken = '" + inputToken + "', sessiontoken = '" + sessionToken + "'"); retourne false; } tokenmap.remove (constants.default_token_name + "." + inputToken); session.setAttribute (constants.spring_mvc_tokenname, tokenmap); Retour Vrai; } / ** Obtenez la valeur de jeton dans le formulaire * / private String getInputToken (request httpservletRequest) {map params = request.getParameTermap (); if (! Params.containsKey (constants.default_token_name)) {_log.warn ("n'a pas pu trouver le nom de jeton dans params."); retourner null; } String [] tokens = (String []) (String []) params.get (constants.default_token_name); if ((tokens == null) || (tokens.length <1)) {_log.warn ("a un nom de jeton nul ou vide."); retourner null; } return tokens [0]; }}