Как следует из названия, синхронизированное ключевое слово используется для синхронизации взаимного исключения.
Здесь я кратко запишу его использование и значение:
1. При синхронизированном изменении этого или нестатического метода или экземпляра синхронизированная блокировка добавляется к этой ссылке или объекту экземпляра. Например, A и B являются экземплярами объектов основного класса. Вызывает синхронизированный метод и B вызывает синхронизированный метод и не образует взаимоисключающего. Тем не менее, синхронизированный метод вызовы объекта из разных потоков являются взаимно эксклюзивными.
Публичный синхронизированный метод void () {//…. } public void method () {synchronized (this) {//… ..}}2. В отличие от 1, когда синхронизированный изменяет имя класса.
Класс Main {public Synchronized Static Void Method1 () {//…. } public void method2 () {synchronized (main.class) //}}}} 3.EG:
пакет com.asiainfolinkage.ems.web.controller.base; Импорт java.math.biginteger; импортировать java.util.date; импортировать java.util.hashmap; импортировать java.util.map; импортировать java.util.random; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpsession; / *** Контроллер с токеном* @version 1.0 Copyright 29 июля 2013 г. в 15:38:30*/ public абстрактного класса TokenbaseController Extends BaseController {Private Static Map <String, String> Springmvc_token = new Hashmap <String, String> (); / ** Сгенерировать токен с уникальным значением*/ public String generationAgiad (httpsession) {string token = ""; Дата дата = новая дата (); 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 (allogalStateException e) {_log.error ("generateAgeuid () mothod найти ошибку, с сеансом токена ..."); }} вернуть токен; } / ** Убедитесь, являются ли значение токена формы и значение токена в сеансе согласованными* / public boolean valloken (httpservletrequest) {string inputeToken = getInputToken (request); if (inputtoken == null) {_log.warn ("Токен недопустим! inputtoken is null"); вернуть ложь; } 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 ("Токен недопустим! SessionToken is null"); вернуть ложь; } String sessiontoken = tokenMap.get (constants.default_token_name + "." + Inputtoken); if (! inputtoken.equals (sessiontoken)) {_log.warn ("Токен недопустим! inputtoken = '" + inputtoken + "', sessiontoken = '" + sessiontoken + "'"); вернуть ложь; } tokenMap.remove (constants.default_token_name + "." + inputtoken); session.setattribute (constants.spring_mvc_tokenname, tokenmap); вернуть истину; } / ** Получить значение токена в форме* / private String getInputToken (httpservletRequest запрос) {map params = request.getParameterMap (); if (! params.containskey (constants.default_token_name)) {_log.warn ("Не удалось найти имя токена в параметрах."); вернуть ноль; } String [] tokens = (string []) (String []) params.get (constants.default_token_name); if ((tokens == null) || (tokens.length <1)) {_log.warn ("Получил нулевое или пустое имя токена."); вернуть ноль; } вернуть токены [0]; }}