كما يوحي الاسم ، يتم استخدام الكلمة الرئيسية المتزامنة لمزامنة الاستبعاد المتبادل.
هنا سوف أسجل بإيجاز استخدامه وأهميته:
1. عند تعديل هذا أو طريقة غير منتظمة أو مثيل ، تتم إضافة القفل المتزامن إلى مرجع كائن مثيل هذا. على سبيل المثال ، A و B كلاهما كائنات مثبتة في الفئة الرئيسية. A استدعاء الطريقة المتزامنة ، و B يستدعي الطريقة المتزامنة ، ولا تشكل حصريًا متبادلًا. ومع ذلك ، فإن استدعاءات الطريقة المتزامنة لكائن من مؤشرات ترابط مختلفة هي حصرية بشكل متبادل.
طريقة void المزامنة العامة () {// ... } طريقة void العامة () {Synchronized (هذا) {// ... ..}}2. على عكس 1 ، عند تعديل المزامنة اسم الفئة. class أو طريقة ثابتة ، حتى الكائنات المختلفة ستشكل حصريًا متبادلًا.
الفئة الرئيسية {public synchronized static void method1 () {//…. } public void method2 () {synchronized (main.class) //}} 3.EG:
package 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 حقوق الطبع والنشر 29 يوليو 2013 في 3:38:30 PM*/ Public Abstract Class TokenBaseController / ** قم بإنشاء رمز مع قيمة فريدة من نوعها*/ السلسلة العامة generateguid (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) ؛ الرمز المميز = جديد 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 = رمز ؛ } catch (alfortalstateException e) {_log.error ("generateguid () mothod find bug ، by token session ...") ؛ }} الرمز المميز للعودة ؛ } / ** تحقق من ما إذا كانت قيمة رمز النموذج وقيمة الرمز المميز في الجلسة متسقة* / boolean public ValealToken (طلب httpservletrequest) {string inputtoken = getInputToken (request) ؛ if (inputToken == null) {_log.warn ("الرمز المميز غير صالح! inputToken فارغ") ؛ العودة كاذبة } جلسة httpsession = request.getSession () ؛ خريطة <string ، string> tokenmap = (map <string ، string>) session.getAttribute (constants.spring_mvc_tokenname) ؛ if (tokenmap == null || tokenmap.size () <1) {_log.warn ("الرمز غير صالح! SessionToken فارغ") ؛ العودة كاذبة } 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 ("لا يمكن العثور على اسم رمز في params.") ؛ العودة لاغية. } String [] Tokens = (String []) (String []) params.get (constants.default_token_name) ؛ if ((Tokens == null) || (Tokens.Length <1)) {_log.warn ("حصلت على اسم رمزي فارغ أو فارغ.") ؛ العودة لاغية. } إرجاع الرموز [0] ؛ }}