国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 舉例講解Java中synchronized關鍵字的用法

舉例講解Java中synchronized關鍵字的用法

2020-04-20 13:53Ai2015WER JAVA教程

這篇文章主要介紹了Java中synchronized關鍵字的用法,針對synchronized修飾方法的使用作出了簡單講解和演示,需要的朋友可以參考下

synchronized關鍵字顧名思義,是用于同步互斥的作用的。

這里精簡的記一下它的使用方法以及意義:

1. 當synchronized修飾 this或者非靜態方法或者是一個實例的時候,所同步的鎖是加在this或者實例對象引用上面的。比如a,b同為Main類的實例化對象,a調用被同步的方法,和b調用被同步的方法,沒有形成互斥。但是不同線程的a對象調用被同步的方法就被互斥了。

?
1
2
3
4
5
6
7
8
9
public synchronized void method(){
  //….
}
public void method()
{
  synchronized (this){
    //…..
  }
}

2.與1不同,當synchronized修飾類名.class 或者靜態方法的時候. 就算是不同對象,也會形成互斥

?
1
2
3
4
5
6
7
8
9
Class Main
{
  public synchronized static void method1(){
    //….
  }
  public void method2(){
    synchronized(Main.class) // 
  }
}

3.eg:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package 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;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
/**
 * 附帶token的控制器
 * @version 1.0 Copyright 2013年7月29日 下午3:38:30
 */
public abstract class TokenBaseController extends BaseController {
 
  private static Map<String, String> springmvc_token = new HashMap<String, String>();
 
  /** 生成一個唯一值的token */
  public String generateGUID(HttpSession session) {
    String token = "";
    Date date = new Date();
    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 (IllegalStateException e) {
        _log.error("generateGUID() mothod find bug,by token session...");
      }
    }
    return token;
  }
 
  /** 驗證表單token值和session中的token值是否一致 */
  public boolean validToken(HttpServletRequest request) {
    String inputToken = getInputToken(request);
 
    if (inputToken == null) {
      _log.warn("token is not valid!inputToken is NULL");
      return 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 is not valid!sessionToken is NULL");
      return false;
    }
    String sessionToken = tokenMap.get(Constants.DEFAULT_TOKEN_NAME + "." + inputToken);
    if (!inputToken.equals(sessionToken)) {
      _log.warn("token is not valid!inputToken='" + inputToken + "',sessionToken = '" + sessionToken + "'");
      return false;
    }
    tokenMap.remove(Constants.DEFAULT_TOKEN_NAME + "." + inputToken);
    session.setAttribute(Constants.SPRING_MVC_TOKENNAME, tokenMap);
 
    return true;
  }
 
  /** 獲取表單中token值 */
  private String getInputToken(HttpServletRequest request) {
    Map params = request.getParameterMap();
    if (!params.containsKey(Constants.DEFAULT_TOKEN_NAME)) {
      _log.warn("Could not find token name in params.");
      return null;
    }
    String[] tokens = (String[]) (String[]) params.get(Constants.DEFAULT_TOKEN_NAME);
    if ((tokens == null) || (tokens.length < 1)) {
      _log.warn("Got a null or empty token name.");
      return null;
    }
    return tokens[0];
  }
}

延伸 · 閱讀

精彩推薦
  • JAVA教程C/C++和Java的交互詳解

    C/C++和Java的交互詳解

    本文旨在簡單的介紹一下如何讓java層和C/C++層相互調用,這里主要是使用了JNI技術,并沒有深究其原理,只是做了個實現,其目的是為后面的學習打開一扇...

    hebedich1872020-03-25
  • JAVA教程java針對電話號碼正則匹配實例

    java針對電話號碼正則匹配實例

    這篇文章主要介紹了java針對電話號碼正則匹配的方法,涉及java正則匹配與字符串操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    懶蘿卜4032019-12-29
  • JAVA教程java多線程編程之join方法的使用示例

    java多線程編程之join方法的使用示例

    join方法的功能就是使異步執行的線程變成同步執行。也就是說,當調用線程實例的start方法后,這個方法會立即返回,如果在調用start方法后后需要使用一...

    java技術網4752019-11-04
  • JAVA教程Javafx簡單實現【我的電腦資源管理器】效果

    Javafx簡單實現【我的電腦資源管理器】效果

    這篇文章主要介紹了Javafx簡單實現【我的電腦資源管理器】效果,涉及Javafx操作系統文件模擬資源管理器的實現技巧,具有一定參考借鑒價值,需要的朋友可以...

    21paradox3712020-01-05
  • JAVA教程java 抓取網頁內容實現代碼

    java 抓取網頁內容實現代碼

    這篇文章主要介紹了java 抓取網頁內容實現代碼,需要的朋友可以參考下 ...

    java教程網4212019-11-11
  • JAVA教程JDK8接口的默認與靜態方法-接口與抽象類的區別詳解

    JDK8接口的默認與靜態方法-接口與抽象類的區別詳解

    這篇文章主要介紹了JDK8接口的默認與靜態方法-接口與抽象類的區別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價...

    java菲3462019-06-29
  • JAVA教程Java線程的控制詳解

    Java線程的控制詳解

    這篇文章主要介紹了Java中的join線程、后臺線程、線程睡眠、線程讓步以及線程的優先級,非常的詳細,希望能對大家有所幫助 ...

    hebedich3572019-12-04
  • JAVA教程java字符串求并集的方法

    java字符串求并集的方法

    這篇文章主要介紹了java字符串求并集的方法,涉及Java字符串操作中union方法的使用,是Java字符串操作中非常實用的基本技巧,需要的朋友可以參考下 ...

    shichen20144282019-12-06
主站蜘蛛池模板: 亚州中文 | 亚洲视频第一页 | 国外爱爱视频 | 精品第一页| 亚洲欧美视频二区 | 亚洲久草| 国产高清精品在线 | 久久女人网 | 亚洲三区在线观看 | 欧美亚洲国产日韩 | 久久青青 | 国产色视频 | 久久综合久久综合久久综合 | 黄色高清网站 | 国产精品久久久久久久久久免费 | 精品乱子伦一区二区三区 | 久久综合影院 | 国产欧美日韩一区二区三区四区 | 久久久成人精品 | 色av综合网| 国产黄色片免费观看 | 黄片毛片在线观看 | 国产在线拍揄自揄拍视频 | 亚洲欧美网址 | 成年人毛片视频 | 亚洲国产aⅴ精品一区二区 少妇一级片免费看 | 视频一区二区国产 | 老熟女毛片| 日韩欧美精品在线 | 亚洲天堂中文字幕 | 久久综合伊人77777蜜臀 | 欧美成人福利 | 亚洲精品久久久久久下一站 | 日本三级网 | 中国一级黄色片子 | 中文在线播放 | 精品国产乱码久久久久久丨区2区 | 欧美成人午夜 | 久久久www成人免费精品 | 四虎免费视频 | 九九热精品视频在线免费观看 |