Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

继承Thread类 继承Thread类,重写run()方法。 1234567891011public class ExtendThread extends Thread { @Override public void run() { super.run(); System.out.println("this is sub...

什么是线程池 线程池,和连接池、常量池一样,是一种池化思想。大概意思是预先把线程都创建好,放到一个池子里,用的时候就去拿,用完了再给下一个任务用,以达到一种资源的高效利用。 为什么要有线程池 为什么要有线程池?和这个问题相对应的一个问题是不用线程池行不行?答案是可以的。比如我们在想使用多线程的时候直接new一个Thread也是可以的,那么这两种方式有什么区别呢?每用一次new一次这样性能是很...

提到MySQL索引,都会讲到B树和B+树,今天来梳理一下。 最开始是二叉查找树,但是这种树不平衡,有时候会退化成一条链表,使得查找时间边长,于是就有了二叉平衡树。 理论上讲,二叉平衡树已经能满足一些查找需求了,为什么还要有B树呢? 因为数据库在磁盘中,而查找的时候需要读一部分数据到磁盘中,这就涉及到了IO,IO的时候是以磁盘块为单位读取的,或者说是以页为单位。我们使用树这种数据结构,一个磁盘...

本文开门见山,直接讨论Spring IoC容器的初始化过程。 关于Spring容器,有一个最基本的接口,叫做BeanFacotory, 它提供了容器最基本的一些特性。所有的容器都是基于它的。还有一个较为高级一点的容器接口,叫做ApplicationContext,它在BeanFactory的基础上,又提供了其他一些高级特性,比如访问资源。 本文以ApplicationContext的一个具体...

为什么要有泛型 它的一个主要目标是将运行时才能发现的错误转移到编译期。 泛型是什么 所谓泛型,就是将类型参数化,即把类型也作为一种参数。如何做到这点呢?通过解耦类或方法与所使用的类型之间的约束。 表面使用 泛型类 1234567891011121314151617181920212223242526public class GenericsDemo <T> { p...
Java

finalize是什么 finalize()是定义在Object类中的一个方法,用于垃圾回收。 finalize原理 当JVM的GC打算回收某个对象时,如果这个对象覆盖了finalize()方法,并且finalize()方法没有被执行过,会把这个对象放在一个叫做F-Queue的队列中,稍后由一个由虚拟机自动建立的,低优先级的Finalizer线程去触发finalize的执行。稍后GC将对F-...
Java

参考 Java提高篇——Java 异常处理
Java

分类 成员内部类 得先创建外部类,然后才能创建内部类。 保存了一个指向外部对象的引用,所以可以访问外部对象的成员。 方法内部类 匿名内部类 匿名类没有名字,继承自父类或者实现了某个接口,它是没有构造器的,因为它连名字都没有。 通过使用实例初始化,就能达到为匿名内部类创建一个构造器的效果(其实就是在定义类的时候在大括号里面再加个大括号写入想要初始化的内容)。 静态内部类(嵌套类 Nested ...
Java

ReentrantReadWriteLock 看下它的类图 可以看到ReentrantReadWriteLock实现了ReadWriteLock接口。ReadWriteLock就是读写锁的意思,那么问题来了,为什么要有个读写锁呢?为什么要把读锁和写锁分开呢?这里就是出于对性能的考虑了,多个线程之间,可以同时读,但是不可以同时写或者一个读一个写,所以分开之后,读锁和写锁各司其职,可以提高效率...
Java