Wie der Name schon sagt, wird das synchronisierte Schlüsselwort verwendet, um den gegenseitigen Ausschluss zu synchronisieren.
Hier werde ich kurz seine Verwendung und Bedeutung aufzeichnen:
1. Wenn synchronisiert diese oder eine nicht-statische Methode oder eine Instanz ändern, wird die synchronisierte Sperre zu dieser oder Instanzobjektreferenz hinzugefügt. Zum Beispiel sind A und B beide instanziierte Objekte der Hauptklasse. A ruft die synchronisierte Methode auf und b ruft die synchronisierte Methode auf und bildet keine gegenseitig ausschließlichen. Die synchronisierten Methodenaufrufe eines Objekts aus verschiedenen Threads schließen sich jedoch gegenseitig aus.
public synchronisierte void -Methode () {//…. } public void method () {synchronisiert (this) {//… ..}}2. Im Gegensatz zu 1, wenn synchronisiert den Klassennamen ändert. Klasse oder statische Methode bilden sich selbst unterschiedliche Objekte gegenseitig ausschließend.
Klasse Main {public synchronisierte statische void -Methode1 () {//…. } public void method2 () {synchronized (main.class) //}} 3.Eg:
Paket 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; importieren javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpSession; / *** Controller mit Token* @version 1.0 Copyright 29. Juli 2013 um 3:38:30 Uhr*/ public abstract Class TokenBaseConTroller erweitert BaseController {private statische Karte <String, String> Springmvc_Token = New Hashmap <String> (); / ** generieren Sie ein Token mit einem eindeutigen Wert*/ public String generateguid (httpSession Session) {String token = ""; Datum Datum = neuer Datum (); synchronized (springMvc_token) {try {object obj = session.getAttribute (constants.spring_mvc_tokenName); if (obj! 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 Fehler, nach Token Session ..."); }} return token; } / ** Überprüfen Sie, ob der Formular -Token -Wert und der Token -Wert in der Sitzung konsistent sind if (inputToken == null) {_log.warn ("Token ist nicht gültig! InputToken ist null"); false zurückgeben; } HttpSession Session = Request.GetSession (); Karte <String, String> tokenmap = (MAP <String, String>) Session.getAttribute (constants.spring_mvc_tokenName); if (tokenmap == null || tokenmap.size () <1) {_log.warn ("Token ist nicht gültig! SessionToken ist null"); false zurückgeben; } String SessionToken = tokenmap.get (constants.default_token_name + "." + InputToken); if (! InputToken.equals (sessionToken)) {_log.warn ("Token ist nicht gültig! InputToken = '" + InputToken + "', sessionToken = '" + sessionToken + "'"); false zurückgeben; } tokenmap.remove (Constants.Default_Token_Name + "." + InputToken); Session.SetAttribute (constants.spring_mvc_tokenName, tokenmap); zurückkehren; } / ** den Token -Wert im Formular abrufen* / private String getInputToken (httpServletRequest Request) {MAP -Params = Request.getParAmeterMap (); if (! params.containsKey (constants.default_token_name)) {_log.warn ("konnte in Params keinen Token -Namen finden."); null zurückkehren; } String [] tokens = (string []) (string []) params.get (constants.default_token_name); if ((tokens == null) || (tokens.length <1)) {_log.warn ("habe einen null- oder leeren Token -Namen erhalten."); null zurückkehren; } return tokens [0]; }}