Java基础
文章平均质量分 83
great_smile
这个作者很懒,什么都没留下…
展开
-
StackOverflowError浅谈
翻译自:http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-stackoverflowerror-how-to-solve-stackoverflowerror/在这篇文章中我们要来探讨一下在java的 StackOverflowError.由于深递归(deep recursion)的操作而出翻译 2014-12-27 21:14:18 · 1256 阅读 · 0 评论 -
JAVA Collection集合全解
一、Collection接口Collection是最基本的集合接口,JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递Collection,并在需要最大普遍性的地方操作这些Collection。常用的子接口有:List,Queue,Set不论Collection的实际类型如何,它都支持一个iterator()的方法,原创 2014-12-26 20:59:38 · 2272 阅读 · 0 评论 -
Java equals和HashCode方法总结
一、如果是自定义类的equals()方法如果是自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的 源码:public boolean equals(Object obj) { return (this == obj); } 二、String,Double,Integer原创 2016-11-09 00:34:58 · 700 阅读 · 0 评论 -
HashTable剖析
HashMap和HashTable非常类似原创 2016-04-26 14:55:26 · 655 阅读 · 0 评论 -
LinkedHashMap剖析
一、结构 LinkedHashMap的结构和HashMap一样都由数组和链表构成 区别: 1.LinkedHashMap多了两个指针head,tail,分别指向第一个插入Map中的节点和最后一个插入Map中的节点/** * The head (eldest) of the doubly linked list. */transient LinkedHashMap.Entry h原创 2016-11-13 16:31:21 · 596 阅读 · 0 评论 -
理解红黑树
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。转载 2016-04-23 16:19:33 · 1323 阅读 · 0 评论 -
Java ConcurrentHashMap分析
今天项目里面出现了一个bug.原因是在多线程的环境下使用了HashMap。HashMap是一个非线程安全的类。举一个例子,在多线程中,如果有当一个线程在遍历HashMap时,另一个线程执行了put或者remove操作会发生ConcurrentModificationExceptionpublic class TestHashMap { public static void ma原创 2015-11-17 20:38:31 · 767 阅读 · 0 评论 -
HashMap剖析
JAVA1.6版本一、HashMap结构图 可以看出1.HashMap是一个数组+链表的结构,数组的下标在HashMap中称为Bucket值,每个数组项对应的是一个List2.每个List中存放的是一个Entry对象,这个Entry对象是包含键和值的二、HashMap存放对象的流程HashMap使用put(key,value)函数存放对象,当调用put(key,value)方法的时候会发生以原创 2016-11-10 20:39:40 · 2904 阅读 · 3 评论 -
HashSet剖析
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { // 使用 HashMap 的 key 保存 HashSet原创 2016-11-24 17:03:01 · 528 阅读 · 0 评论 -
《java并发编程实战》读书笔记——基础知识
1。Servlet是非线程安全的。2。当代码逻辑的正确性取决于多个线程的交替执行的时序时,就会出现竞争条件。3。如果只是将每个方法都作为同步方法,例如Vector,那么不足以保证Vector上的复合操作都是原子的。4。内存可见性问题。...原创 2016-01-01 13:52:32 · 781 阅读 · 0 评论 -
《java并发编程实战》读书笔记——避免死锁的发生
我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁。当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他们将永远被阻塞。在数据库系统的设中考虑了检测死锁以及从死锁中恢复。但它检测到一组事务发生了死锁时(通过在表示等待关系的有向图中搜索循环),将选择一个牺牲者并放弃这个事务JVM在解决死锁问题方面并没有数据库服务那样强大。当一组线程发生死锁时,“游戏”将原创 2015-03-25 13:50:30 · 1166 阅读 · 0 评论 -
《java并发编程实战》读书笔记——线程池
饱和策略1.“终止”策略,默认策略:该策略将抛出 RejectedExecutionException。当无法放入队列中时,抛弃该任务。2.“调用者运行”策略:当任务队列满时。将下一个提交上来的任务,交给调用ExecutorService来执行任务的主线程来执行,而不再通过ExecutorService线程池来执行这个任务由于执行任务需要一定的时间,因此原创 2015-12-06 20:41:20 · 774 阅读 · 0 评论 -
java List利用Comparator进行排序
直接上例子:一个类public class VO { /** * 名称. */ public String Name; /** * 类型. */ public String Type;}要实现:List list 中的VO类先按Type排序,如果type一样再按Name排序;方法一:VO 继承 Comparable接口代码如原创 2014-03-07 10:09:00 · 2267 阅读 · 0 评论 -
java native&JNI
1.参考文献:http://blog.csdn.net/youjianbo_han_87/article/details/2586375http://blog.csdn.net/yangjiali014/article/details/1633017http://blog.chinaunix.net/space.php?uid=7437948&do=blog&id=20转载 2014-12-31 14:29:48 · 665 阅读 · 0 评论 -
java创建线程implement runnable 和 extends thread 比较
我们都知道java实现线程有两种方法一。继承Thread类二。实现Runnable接口我们知道从代码上看 第二种方法扩张性更好,因为java的单继承特性看到很多说法他们之间有一个区别是:实现Runnable接口才能实现资源共享。并且附有类似一下的实例://Implement Runnable Interface...class ImplementsRunnab原创 2014-12-31 17:07:59 · 7678 阅读 · 0 评论 -
JAVA垃圾收集机制
一。哪些内存需要回收: java使用的不是引用计数法。如果两个对象互相引用,引用计数不为0,那么就无法回收这些对象。java使用的是:可达性分析(Reachability Analysis),这个算法的思想是通过一系列的称为“GC Roots”的对象作为起点,从这些起点开始往下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何的引用链,相连接时,则原创 2015-11-19 23:03:34 · 1101 阅读 · 0 评论 -
JAVA volatile 的原理与技巧
一、volatile的原理Java内存模型对volatile专门定义了一些特殊的访问规则。我们用通俗的语言解释一下:1.当一个变量定义为volatile后,保证此变量对所有线程的可见性——当一条线程修改了这个变量的值以后,新的值对于其他线程是立即可知的。引用《java并发编程实战》对这个特性的描述:当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量时共享原创 2014-12-26 20:45:18 · 1026 阅读 · 0 评论 -
Java Volatile
volatile的原理Java内存模型对volatile专门定义了一些特殊的访问规则。 我们用通俗的语言解释一下:保持立即可见性当一个变量定义为volatile后,若一条线程修改了这个变量的值,新的值对于其他线程是立即可知的。 引用《java并发编程实战》的描述: 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是时时共享的,volatile变量不会被缓存在寄存器或者对原创 2016-01-16 23:54:08 · 573 阅读 · 0 评论 -
《java并发编程实战》读书笔记——并发应用
1.使用线程池当应用需要处理多个任务时,例如一个Web服务器处理它接收到的请求,可以使用线程池。通过重用现有的线程而不是创建新的线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大开销。另一个好处是,当一个请求到达时,工作线程通常已经存在,因此不会由于等待创建线程而延时任务的执行,从而提高响应性。通过适当调整线程池的大小,可以创建足够多的线程以便使处理器保存忙碌状态,同时原创 2016-01-06 22:11:10 · 1520 阅读 · 0 评论 -
JAVA线程池全解
我们都知道线程池有很多好处: 通过重复利用已经创建好的线程,可以减少创建线程时的资源消耗。 如果不限制线程的数量,不仅会大量消耗系统内存,还会照成系统的不稳定。 使用线程池,可以控制线程的数量,还可以对所有线程进行统一的管理,好处不言而喻。原创 2016-01-17 22:52:45 · 1043 阅读 · 0 评论 -
Java JVM内存结构,区域划分
先贴一个网上还有一些书上用的很多的一张图:我们平时多多少少都知道java内存结构主要由堆 和 栈 两部分组成。可见这是我们平时最关系的两个部分。先引用一下《深入理解Java虚拟机》一书中的解读:我们平时所说的堆就是上图中画的堆(Heap)。而我们平时说说的栈指的是上图的虚拟机栈(VM Stack)那我们先看一下Java内存最主要的这两部分,虚拟机栈(VM Stack原创 2015-11-19 22:26:32 · 1158 阅读 · 0 评论