- Java集合性能调优
夜游猿
Java开发工程师面试javawindows开发语言
Java集合性能调优初始化优化容量规划publicclassCollectionCapacityExample{//不好的实践:使用默认容量publicvoidbadInitialization(){Listlist=newArrayListmap=newHashMaplist=newArrayListmap=newHashMaplist=newArrayList(list)){if(item.s
- Java集合性能优化面试题
夜游猿
Java开发工程师面试javapython开发语言
Java集合性能优化面试题初始化优化Q1:如何优化集合的初始化?publicclassCollectionInitializationExample{//1.合理设置初始容量publicvoidinitializationOptimization(){//不好的实践:使用默认容量ListbadList=newArrayListgoodList=newArrayListmap=newHashMapl
- java扑克牌排序_Java 实现斗地主扑克牌排序
2333哒哒哒
java扑克牌排序
packagecom.yu.go;importjava.util.Arrays;importjava.util.Collections;importjava.util.Comparator;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassDay01{privatestaticInteger[]z
- python-两数之和
张喵喵是小仙女
每日一道算法题
'''给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。'''deftwosum(nums,tatget):hashmap={}forind,numinenumerate(nums):hashmap[num]=indfori,numinenumerate(nu
- Map的遍历
谁给起个名字
intellij-idea
1.Map的遍历Map提供了四种遍历方式:1.1遍历所有的key1.2遍历每一组键值对1.3遍历所有的value(该操作不常用)1.4Foreach遍历Mapmap=newHashMapkeySet=map.keySet(); for(Stringkey:keySet){ System.out.println("key:"+key); }1.2SetentrySet()将当前
- 回溯算法总结
Javan Lu
算法题算法数据结构java
回溯法17.电话号码的字母组合22.括号生成39.组合总和40.组合总和II46.全排列47.全排列II77.组合78.子集90.子集II93.复原IP地址79.单词搜索131.分割回文串401.二进制手表当遇到组合问题的时候,要想到回溯法。17.电话号码的字母组合classSolution{Listres=newArrayListmap=newHashMapletterCombinations(
- android学习,android后端服务器的搭建
2401_84413531
程序员android学习服务器
那么在市场紧缩以及大前端的趋势下,我们移动端程序员如何突破职业瓶颈,保持个人的核心竞争力呢?一、硬技能:专业的技术知识1.Java/Kotlin开发语言Java常用数据结构:ArrayList、Vector、CopyOnWriteArrayList、HaspMap、ConcurrentHashMap、HashTable等使用场景。JVM虚拟机包括Java内存管理,GC垃圾回收机制,类加载机制。推荐
- 【数据序列化协议】Protocol Buffers
茉菇
网络
一、为什么需要序列化?数据跨平台/语言交互:不同编程语言(如Java、Python、Go)的数据结构不兼容,序列化提供统一的数据表示。例如:Java的HashMap和Python的dict需转换为通用格式(如JSON、Protobuf)才能通信。网络传输优化:原始内存中的对象包含指针、元数据等冗余信息,无法直接传输。序列化后数据体积更小,减少带宽占用,提升传输效率。持久化存储:将对象转换为字节流或
- Spring Bean 如何保证并发安全???
G丶AEOM
八股普通学习区java八股spring
SpringBean如何保证并发安全简单来说:1、可以设置Beon的作用域为原型,这样每次从容器中获取该Bean时,都会创建一个新的实例,避免了多线程共享同一个对象实例的问题2、在不改变Beon的作用域的情况下,可以避免在Beon中存在可变状态的声明,尽量将状态信息存在方法内部的局部变量中,或者使用线程安全的数据结构,如ConcurrentHashMap来管理状态3、使用Java并发编程中提供的锁
- deepseek给我出的面试题,你能写多少?
Xia0Mo
Java面试Java面经
以下是针对您的项目经历和技能整理的面试题目,分为技术深度、项目实践和综合设计三类:一、技术深度类Java基础如何理解JMM中的可见性、有序性和原子性?结合volatile和synchronized说明它们的实现原理。请解释ConcurrentHashMap在JDK7和JDK8中的线程安全实现差异,为什么JDK8改用CAS+synchronized?JVM垃圾回收算法中,标记-复制和标记-整理分别适
- hashMap的理解
敲键盘的小猴子
Java基础javahashmap链表
hashMap的理解一、HashMap简介put原理get原理二、哈希碰撞三、与HashTable的区别1.HashTable介绍2.区别最后、常见问题一、HashMap中的“死锁”是怎么回事一、HashMap简介HashMap是基于哈希表实现的,每一个元素是一个key-value对,无序,不可重复。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包
- Netty学习 - 编译Netty4.2
wisfy_21
Netty学习
编译Netty4.2版本遇到一些问题:首先是缺失io.netty.util.collection.IntObjectHashMap这类collection包。这个问题的原因是,在netty-common下,这些是需要根据模板生成类,所以需要先编译打包netty-common。在netty-common下执行package的时候,会遇到另一个错误io.netty:netty-dev-tools:ja
- 遍历HashMap,有6种方式,你学会了没?
程序员猫哥
pythonjava开发语言
在Java中,有多种方式可以遍历HashMap,下面为你详细介绍几种常见的遍历方法。1,使用keySet()遍历键,再通过键获取值创建一个HashMap对象,并向其中添加一些键值对。使用map.keySet()方法获取HashMap中所有键的集合。通过for-each循环遍历这个键的集合。在循环体中,使用map.get(key)方法根据当前键获取对应的值,并将键和值打印输出。packagecom.
- 刷题记录04
灵之未来
算法练习记录学习算法java
力扣530.二叉搜索树的最小绝对值给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。树中节点的数目范围是[2,104]0list=newArrayListstack=newStackmap=newHashMaplist=newArrayListm:map.entrySet()){if(m.getValue()>maxCount)
- Spark中Dataset方法详解
小巫程序Demo日记
Spark+Hadoop学习sparkajaxjava分布式
一、数据清洗核心方法1.处理缺失值方法说明示例代码na().drop()删除包含空值的行Datasetcleaned=dataset.na().drop();na().fill(value)用指定值填充所有空值Datasetfilled=dataset.na().fill(0);na().fill(Map)按列填充不同值Mapfills=newHashMapunique=dataset.dropD
- 【学习笔记】Python基础-字典Dict和Set和List与Str扩展
法迪
Python基础pythonhashmapDictsetlist
Dict使用大括号围起来,这里提供一种键值对的list表示方法1.Dict{}2.List[]3.turple()实例代码#!/usr/bin/envpython3#-*-coding:utf-8-*-#字典dict类似Java的HashMap#Dict{}#List[]#turple()mDict={"Lava":90,"Huawei":100,"Sony":60}print(mDict['La
- java笔记——Map循环指南
啊健的影子
java笔记python
一、遍历Map的三种方法Java中的Map是一种以键值对形式存储数据的容器,常用的实现类有HashMap、LinkedHashMap和TreeMap。遍历Map是我们在使用Map时最常遇到的问题之一,下面介绍三种常用的遍历方法。1.通过entrySet遍历Mapmap=newHashMap();map.put(1,"one");map.put(2,"two");map.put(3,"three")
- 1.力扣热题100
珍珠是蚌的眼泪
刷题leetcode力扣热题100
文章目录一、两数之和二、字母异位词分组三、最长连续序列一、两数之和publicint[]twoSum(int[]nums,inttarget){HashMapnumIndexMap=newHashMap();int[]result=newint[2];for(inti=0;i>groupAnagrams(String[]strs){Map>strListMap=newHashMapcurList=
- 【Java集合】 HashMap底层原理 和 Hash冲突的解决方法
wy02_
面试java
HashMapHashMap底层数据结构底层数据结构:hash表数据结构,即数组+链表|红黑树往HashMap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标存储时,当出现hash相同的key如果key相同,则覆盖原始值如果key不相同(hash冲突),则将当前数据放入链表或红黑树中获取数据时,对key进行hash运算,找到数组中对象的hash值下标,在进
- Java实习生常规技术面试题每日十题Java基础(五)
用户昵称23
面试阿里巴巴java开发语言jvmhtmlgolang
目录1.启动一个线程是用run()还是start()?.?2.线程的基本状态以及状态之间的关系。3.Set和List的区别,List和Map的区别?4.同步方法、同步代码块区别?5.描述Java锁机制。6.Comparable和Comparator接口是干什么的?列出它们的区别7.Java集合类框架的最佳实践有哪些?8.HashMap和Hashtable的区别。
- 08-两数之和(四种解法)
最遥远的瞬间
算法合集算法数据结构
两数之和1:给定一个整数数组num,从数组中找出两个数满足相加之和等于目标数target。假设每个输入只对应唯一的答案,而且不可以重塑使用相同的元素。返回两数的下标值,以数组形式返回。importjava.util.Arrays;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;publicclassdemo01
- 红 - 黑树和 B+树?
百态老人
笔记
红黑树是一种自平衡二叉查找树,由RudolfBayer发明,在1978年被LeoJ.Guibas和RobertSedgewick改称为“红黑树”。它的特点包括每个节点非红即黑;根节点是黑色;每个叶子节点都是黑色的空节点;如果一个节点是红色的,那么它的两个子节点都是黑色;从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。在Java集合框架中,很多部分如HashMap、TreeMap、Tree
- Java中的并发状态共享实现
兔子先生°
java
文章目录前言一、代码解析二、关键点解释二、使用方式总结前言在多线程和分布式系统中,数据的一致性和同步性是至关重要的。为了处理这些需求,Java提供了多种工具和技术,其中之一就是CompletableFuture。本文将介绍一个使用CompletableFuture来实现简单状态共享机制的示例代码。一、代码解析下面是一个名为StateShare的类,它利用了ConcurrentHashMap与Com
- 线程安全的集合类
、枉然
JavaEE安全windowsjvm
文章目录多线程环境使⽤`ArrayList`线程不安全线程安全可以使用`ReentrantLock`或`synchronized`来保护`ArrayList`的访问。使用同步包装器使用`CopyOnWriteArrayList`**“写时复制”机制**多线程环境使⽤队列多线程环境使⽤哈希表HashtableConcurrentHashMapHashMap、HashTable、ConcurrentH
- java-collection类
在下陈平安
javajava开发语言
前言:collection类下面有多个实现子类,每个实现子类都不一样,通过梳理每个实现子类,快速掌握便于日常工作。关系图:Collection└──List└──Set└──Map└──Queue└──ArrayList└──LinkedList└──HashSet└──TreeSet└──HashMap└──LinkedHashMap└──Queue└──ArrayDequeCollection
- MybatisPlus + SpringBoot + Vue 实现自定义联表查询,返回 HashMap<String, Object> 条件,分页,模糊,total
沐沐uuu
springboot后端java
MybatisPlus+SpringBoot+Vue实现自定义联表查询,返回HashMap条件,分页,模糊,totalMybatisPlus极大的简化了单表查询的重复操作,但是在联表的时候,特别是在查询的结果集没有对应实体类的时候,就还要手写sql,手写分页和模糊,返回HashMap对象。这里我写一个Demo,以方便以后的开发中遇到这种情况。mapper.xmlSELECTa.APPLICATIO
- Java 中的 HashMap 和 Hashtable 有什么区别?
一只蜘猪
java哈希算法开发语言
一、线程安全性特性HashMapHashtable线程安全非线程安全,需手动同步或使用ConcurrentHashMap所有方法使用synchronized修饰,线程安全锁机制无锁,多线程操作需外部同步全表锁,并发性能较低适用场景单线程或需要高并发性能的场景遗留代码维护,不推荐新项目使用示例代码对比://HashMap在多线程下需同步MaphashMap=newHashMaphashtable=n
- IDEA-快捷键积累
Mr.Debug
快捷键intellijidea
文章目录前言一、使用步骤1.debug常用2.查找前言windows系统自己idea的debug快捷键记录。一、使用步骤1.debug常用alt+F10跳转到正在执行的行2.查找Alt+F7查找类或方法在哪被使用Ctrl+H查看类的继承关系,例如HashMap的父类是AbstractMap,子类则有一大堆。Ctrl+F12当前类中查找一个方法快捷键例如在String类中查找contains方法。第
- 哈希表-两个数的交集
Hasno.
散列表算法数据结构
代码随想录-刷题笔记349.两个数组的交集-力扣(LeetCode)内容:集合的使用,重复的数剔除掉,剩下的即为交集,最后加入数组即可。classSolution{publicint[]intersection(int[]nums1,int[]nums2){Setresult=newHashSetmap=newHashMap<>();for(inti:nums1){map.put(i,map.ge
- LeetCode Hot100 - 子串篇
搞笑症患者
力扣hot100leetcode算法子串
前言挑战一个月刷完力扣的hot100,记录一下每题的思路~这次是子串相关的题目(1)560.和为K的子数组①暴力枚举,使用一个变量sum记录以l开头r结尾的情况classSolution{publicintsubarraySum(int[]nums,intk){intres=0;//枚举每种情况for(intl=0;lmap=newHashMappq=newPriorityQueueInteger
- java类加载顺序
3213213333332132
java
package com.demo;
/**
* @Description 类加载顺序
* @author FuJianyong
* 2015-2-6上午11:21:37
*/
public class ClassLoaderSequence {
String s1 = "成员属性";
static String s2 = "
- Hibernate与mybitas的比较
BlueSkator
sqlHibernate框架ibatisorm
第一章 Hibernate与MyBatis
Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。
MyBatis 参考资料官网:http:
- php多维数组排序以及实际工作中的应用
dcj3sjt126com
PHPusortuasort
自定义排序函数返回false或负数意味着第一个参数应该排在第二个参数的前面, 正数或true反之, 0相等usort不保存键名uasort 键名会保存下来uksort 排序是对键名进行的
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8&q
- DOM改变字体大小
周华华
前端
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
- c3p0的配置
g21121
c3p0
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的下载地址是:http://sourceforge.net/projects/c3p0/这里可以下载到c3p0最新版本。
以在spring中配置dataSource为例:
<!-- spring加载资源文件 -->
<bean name="prope
- Java获取工程路径的几种方法
510888780
java
第一种:
File f = new File(this.getClass().getResource("/").getPath());
System.out.println(f);
结果:
C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin
获取当前类的所在工程路径;
如果不加“
- 在类Unix系统下实现SSH免密码登录服务器
Harry642
免密ssh
1.客户机
(1)执行ssh-keygen -t rsa -C "
[email protected]"生成公钥,xxx为自定义大email地址
(2)执行scp ~/.ssh/id_rsa.pub root@xxxxxxxxx:/tmp将公钥拷贝到服务器上,xxx为服务器地址
(3)执行cat
- Java新手入门的30个基本概念一
aijuans
javajava 入门新手
在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。 Java概述: 目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合
- Memcached for windows 简单介绍
antlove
javaWebwindowscachememcached
1. 安装memcached server
a. 下载memcached-1.2.6-win32-bin.zip
b. 解压缩,dos 窗口切换到 memcached.exe所在目录,运行memcached.exe -d install
c.启动memcached Server,直接在dos窗口键入 net start "memcached Server&quo
- 数据库对象的视图和索引
百合不是茶
索引oeacle数据库视图
视图
视图是从一个表或视图导出的表,也可以是从多个表或视图导出的表。视图是一个虚表,数据库不对视图所对应的数据进行实际存储,只存储视图的定义,对视图的数据进行操作时,只能将字段定义为视图,不能将具体的数据定义为视图
为什么oracle需要视图;
&
- Mockito(一) --入门篇
bijian1013
持续集成mockito单元测试
Mockito是一个针对Java的mocking框架,它与EasyMock和jMock很相似,但是通过在执行后校验什么已经被调用,它消除了对期望 行为(expectations)的需要。其它的mocking库需要你在执行前记录期望行为(expectations),而这导致了丑陋的初始化代码。
&nb
- 精通Oracle10编程SQL(5)SQL函数
bijian1013
oracle数据库plsql
/*
* SQL函数
*/
--数字函数
--ABS(n):返回数字n的绝对值
declare
v_abs number(6,2);
begin
v_abs:=abs(&no);
dbms_output.put_line('绝对值:'||v_abs);
end;
--ACOS(n):返回数字n的反余弦值,输入值的范围是-1~1,输出值的单位为弧度
- 【Log4j一】Log4j总体介绍
bit1129
log4j
Log4j组件:Logger、Appender、Layout
Log4j核心包含三个组件:logger、appender和layout。这三个组件协作提供日志功能:
日志的输出目标
日志的输出格式
日志的输出级别(是否抑制日志的输出)
logger继承特性
A logger is said to be an ancestor of anothe
- Java IO笔记
白糖_
java
public static void main(String[] args) throws IOException {
//输入流
InputStream in = Test.class.getResourceAsStream("/test");
InputStreamReader isr = new InputStreamReader(in);
Bu
- Docker 监控
ronin47
docker监控
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路。 1、关于监控的内容 监控宿主机本身
监控宿主机本身还是比较简单的,同其他服务器监控类似,对cpu、network、io、disk等做通用的检查,这里不再细说。
额外的,因为是docker的
- java-顺时针打印图形
bylijinnan
java
一个画图程序 要求打印出:
1.int i=5;
2.1 2 3 4 5
3.16 17 18 19 6
4.15 24 25 20 7
5.14 23 22 21 8
6.13 12 11 10 9
7.
8.int i=6
9.1 2 3 4 5 6
10.20 21 22 23 24 7
11.19
- 关于iReport汉化版强制使用英文的配置方法
Kai_Ge
iReport汉化英文版
对于那些具有强迫症的工程师来说,软件汉化固然好用,但是汉化不完整却极为头疼,本方法针对iReport汉化不完整的情况,强制使用英文版,方法如下:
在 iReport 安装路径下的 etc/ireport.conf 里增加红色部分启动参数,即可变为英文版。
# ${HOME} will be replaced by user home directory accordin
- [并行计算]论宇宙的可计算性
comsci
并行计算
现在我们知道,一个涡旋系统具有并行计算能力.按照自然运动理论,这个系统也同时具有存储能力,同时具备计算和存储能力的系统,在某种条件下一般都会产生意识......
那么,这种概念让我们推论出一个结论
&nb
- 用OpenGL实现无限循环的coverflow
dai_lm
androidcoverflow
网上找了很久,都是用Gallery实现的,效果不是很满意,结果发现这个用OpenGL实现的,稍微修改了一下源码,实现了无限循环功能
源码地址:
https://github.com/jackfengji/glcoverflow
public class CoverFlowOpenGL extends GLSurfaceView implements
GLSurfaceV
- JAVA数据计算的几个解决方案1
datamachine
javaHibernate计算
老大丢过来的软件跑了10天,摸到点门道,正好跟以前攒的私房有关联,整理存档。
-----------------------------华丽的分割线-------------------------------------
数据计算层是指介于数据存储和应用程序之间,负责计算数据存储层的数据,并将计算结果返回应用程序的层次。J
&nbs
- 简单的用户授权系统,利用给user表添加一个字段标识管理员的方式
dcj3sjt126com
yii
怎么创建一个简单的(非 RBAC)用户授权系统
通过查看论坛,我发现这是一个常见的问题,所以我决定写这篇文章。
本文只包括授权系统.假设你已经知道怎么创建身份验证系统(登录)。 数据库
首先在 user 表创建一个新的字段(integer 类型),字段名 'accessLevel',它定义了用户的访问权限 扩展 CWebUser 类
在配置文件(一般为 protecte
- 未选之路
dcj3sjt126com
诗
作者:罗伯特*费罗斯特
黄色的树林里分出两条路,
可惜我不能同时去涉足,
我在那路口久久伫立,
我向着一条路极目望去,
直到它消失在丛林深处.
但我却选了另外一条路,
它荒草萋萋,十分幽寂;
显得更诱人,更美丽,
虽然在这两条小路上,
都很少留下旅人的足迹.
那天清晨落叶满地,
两条路都未见脚印痕迹.
呵,留下一条路等改日再
- Java处理15位身份证变18位
蕃薯耀
18位身份证变15位15位身份证变18位身份证转换
15位身份证变18位,18位身份证变15位
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 201
- SpringMVC4零配置--应用上下文配置【AppConfig】
hanqunfeng
springmvc4
从spring3.0开始,Spring将JavaConfig整合到核心模块,普通的POJO只需要标注@Configuration注解,就可以成为spring配置类,并通过在方法上标注@Bean注解的方式注入bean。
Xml配置和Java类配置对比如下:
applicationContext-AppConfig.xml
<!-- 激活自动代理功能 参看:
- Android中webview跟JAVASCRIPT中的交互
jackyrong
JavaScripthtmlandroid脚本
在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之:
1 JAVASCRIPT脚本调用android程序
要在webview中,调用addJavascriptInterface(OBJ,int
- 8个最佳Web开发资源推荐
lampcy
编程Web程序员
Web开发对程序员来说是一项较为复杂的工作,程序员需要快速地满足用户需求。如今很多的在线资源可以给程序员提供帮助,比如指导手册、在线课程和一些参考资料,而且这些资源基本都是免费和适合初学者的。无论你是需要选择一门新的编程语言,或是了解最新的标准,还是需要从其他地方找到一些灵感,我们这里为你整理了一些很好的Web开发资源,帮助你更成功地进行Web开发。
这里列出10个最佳Web开发资源,它们都是受
- 架构师之面试------jdk的hashMap实现
nannan408
HashMap
1.前言。
如题。
2.详述。
(1)hashMap算法就是数组链表。数组存放的元素是键值对。jdk通过移位算法(其实也就是简单的加乘算法),如下代码来生成数组下标(生成后indexFor一下就成下标了)。
static int hash(int h)
{
h ^= (h >>> 20) ^ (h >>>
- html禁止清除input文本输入缓存
Rainbow702
html缓存input输入框change
多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。
如果不想让浏览器缓存input的值,有2种方法:
方法一: 在不想使用缓存的input中添加 autocomplete="off";
<input type="text" autocomplete="off" n
- POJO和JavaBean的区别和联系
tjmljw
POJOjava beans
POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规
- java中单例的五种写法
liuxiaoling
java单例
/**
* 单例模式的五种写法:
* 1、懒汉
* 2、恶汉
* 3、静态内部类
* 4、枚举
* 5、双重校验锁
*/
/**
* 五、 双重校验锁,在当前的内存模型中无效
*/
class LockSingleton
{
private volatile static LockSingleton singleton;
pri