이름에서 알 수 있듯이 동기화 된 키워드는 상호 제외를 동기화하는 데 사용됩니다.
여기서는 사용법과 중요성을 간단히 기록 할 것입니다.
1. 동기화 된 이이 또는 비 정적 메소드 또는 인스턴스를 수정하면 동기화 된 잠금 이이 또는 인스턴스 객체 참조에 추가됩니다. 예를 들어, A와 B는 주 클래스의 인스턴스화 된 객체입니다. A는 동기화 된 메소드를 호출하고 B는 동기화 된 메소드를 호출하며 상호 배타적 인 형을 형성하지 않습니다. 그러나 다른 스레드에서 객체의 동기화 된 메소드 호출은 상호 배타적입니다.
public synchronized void method () {//…. } public void method () {synchronized (this) {//… ..}}2. 1과 달리 동기화 된 클래스 이름을 수정하면 클래스 또는 정적 메소드를 수정하면 다른 객체조차도 상호 독점적으로 형성됩니다.
클래스 메인 {public synchronized static void method1 () {//…. } public void method2 () {synchronized (main.class) //}} 3.EG :
패키지 com.asiainfolinkage.ems.web.controller.base; java.math.biginteger import; import java.util.date; java.util.hashmap import; java.util.map import; java.util.random import; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpsession; / *** 토큰이있는 컨트롤러* @version 1.0 저작권은 2013 년 7 월 29 일 오후 3시 3 분 30 분*/ 공개 초록 클래스 토큰 바이즈 컨트롤러 확장 BaseController {private static map <string, String> springmvc_token = new Hashmap <String, String> (); / ** 고유 한 값을 가진 토큰을 생성*/ public String generateUid (httpsession session) {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); 토큰 = New BigInteger (165, new random ()). Tostring (36) .toupperCase (); springmvc_token.put (constants.default_token_name + "." + 토큰, 토큰); session.setattribute (constants.spring_mvc_tokenname, springmvc_token); constants.token_value = 토큰; } catch (delegalstateException e) {_log.error ( "generateUid () mothod find bu by token session ..."); }} 리턴 토큰; } / ** 세션의 양식 토큰 값과 토큰 값이 일관성이 있는지 확인하십시오* / public boolean validToken (httpservletRequest request) {String inputoken = getInputToken (request); if (inputtoken == null) {_log.warn ( "토큰은 유효하지 않습니다! inputtoken은 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 ( "Token은 유효하지 않습니다! sessionToken은 null"); 거짓을 반환합니다. } 문자열 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 ( "params에서 토큰 이름을 찾을 수 없음"); 널 리턴; } string [] tokens = (string []) (String []) params.get (constants.default_token_name); if ((tokens == null) || (Tokens.length <1)) {_log.warn ( "널 또는 빈 토큰 이름을 얻었습니다."); 널 리턴; } 리턴 토큰 [0]; }}