今天在写代码的时候遇到了一个问题,线程拥有一个方法class的锁后 又再次申请已经拥有的class对象的锁,会不会进去呢,结论 可以进去,但不知道因为什么,查了一下发现这个涉及 可重入锁的这么一个概念,学习一下。
相关代码
1 2 3 4 5 6 7 8 9 10
| private static void initValidation(){ if( ! initFlag ){ synchronized (PinyinUtil.class) { if (!initFlag) { initPinyinMap(); initFlag = true; } } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| private static void initPinyinMap(){ Properties dic = new Properties(); //从类路径下 加载拼音字典 try(BufferedReader in = new BufferedReader( new InputStreamReader( PinyinUtil.class.getClassLoader().getResourceAsStream("pinyin/PinYinDic.mapping"),"utf-8") )) { dic.load(in); } catch (IOException e) { throw new QRuntimeException("加载拼音字典文件失败"); } Map dicMap = new HashMap( (Map)dic ); if(!dicMap.isEmpty()){//是否读取到拼音字典内容 synchronized (PinyinUtil.class){// 此处 pinyinMap.clear(); pinyinMap.putAll(dicMap); } } }
|
知识
http://www.cnblogs.com/cielosun/p/6684775.html