随笔分类 - Java
摘要:ArrayList (数组链表)使用Object数组作为存储。 默认构造函数为: 构造一个空的链表,该链表没有进行初始化,在调用其add()方法时,进行了初始化: ensureCapacityInternal()方法是 get()方法:
阅读全文
摘要:1. String是使用char[]数组来存储的,并且String值在创建之后就不可以改变了。char[]数组的定义为: char[]数组value使用final修饰,因此赋值之后就不可以改变了。再看一下String的hashCode()方法的实现就更能说明这一点: 成员变量hash,用来缓存Str
阅读全文
摘要:ConcurrentHashMap (JDK 1.7)的继承关系如下: 1. ConcurrentHashMap是线程安全的hash map。ConcurrentHashMap的数据结构是一个Segment<K, V>数组: 其中,HashEntry的定义如下: 因此,Segment数组的意义就是将
阅读全文
摘要:HashTable继承关系如下: HashTable是一个线程安全的【键-值对】存储结构。其存储结构和HashMap相同,参考这里。 1. HashTable定义了一个类型为Entry<K,V>的数组table用来存储数据。 类型Entry<K,V>的定义如下: 由Entry<K,V>的定义可知,上
阅读全文
摘要:HashSet (jdk 1.7)的继承关系如下: HashSet是使用HashMap实现的一个没有重复元素的集合。HashSet用法如下: 从HashSet的add()方法可以看出,只有一个参数,并没有【键-值对】。 其实是HashSet只使用了HashMap的key,value统一是一个固定的O
阅读全文
摘要:hashmap (jdk 1.7)使用 “数组-链表” 方式进行存储,图形化表示如下: 即,前面是一个数组,后面跟一个链表,那么数据结构这个对应到HashMap的代码里面是什么样子的呢? 在HashMap中定义了一个类型为Entry<K,V>的数组table,上图就是显示了这个table。 类型En
阅读全文
摘要:1. 使用ReentrantLock 结果为:
阅读全文
摘要:原因:学习ConcurrentLinkedQueue是看到akka框架的默认邮箱是使用ConcurrentLinkedQueue实现的。 1. ConcurrentLinkedQueue在java.util.concurrent包中(java 版本是1.7.0_71),类间继承关系如下: Concu
阅读全文
摘要:1. Can't get Kerberos realm 原因分析: 原始代码为: 首先根据传进来的Hadoop配置conf,去设置UserGroupInformation(UGI),方法的调用关系如下(删除了部分不相关代码): initialize方法如下 setConfiguration方法如下
阅读全文
摘要:1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 先看一段代码,假如线
阅读全文
摘要:查看java进程: 然后,使用jinfo pid 查看: 有一行VM Flages:表示启动参数
阅读全文
摘要:java里生成对象有如下两种方式: 同样是生成对象, (一) 在编译期间 1: 在编译期间检查classpath, 如果没有类定义,编译没法通过。 2: 在编译期间是不会检查的,不过需要抛出或者自己catch ClassNotFoundException。 运行期间,如果1编译时依赖的类不在clas
阅读全文
摘要:原因是run configuration -> maven -> preject name -> Parameters -> command line中是install:install. 改成install就可以了. 参考: http://stackoverflow.com/questions/63
阅读全文
摘要:正则表达式全部符号解释 字符描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp
阅读全文
摘要:正则表达式匹配公式为:^((?!XXX).)*$, XXX为字符串。
阅读全文
摘要:首先,编写一个死锁程序 程序运行结果是: 接下来在终端中输入jsp查看当前运行的java程序: 获取testJstack的进程ID为7480.然后使用命令: 将jstack检测结果放入文件deadlock.jstack。使用vim查看该文件:
阅读全文
摘要:1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提
阅读全文
摘要:sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会释放对象锁。 而当调用wait()方法的时候,线程会放弃对象锁(仍然持有资源),进入等待此对象的等待锁定池,只有针对
阅读全文
摘要:HashMap:http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html ConcurrentHashMap:http://www.iteye.com/topic/344876 HashMap扩容:http://blog.csd
阅读全文
摘要:数据库事务无非就两种:读取事物(select)、修改事物(update,insert)。 在没有事物隔离控制的时候,多个事物在同一时刻对同一(数据的操作可能就会影响到最终期望的结果,通常有四种情况: (1) 两个更新事物同时修改一条数据时,很显然这种情况是最严重的了,程序中无论如何也不能出现这种情况
阅读全文