博客
分类
标签
归档
关于
博客
分类
标签
归档
关于
Tau的博客
文章
分类
标签
归档
关于
Java中的Condition
前面的文章中,我们了解了Java中的Lock接口,以及相关的实现类ReentrantLock、ReentrantReadWriteLock。它们都是通过聚合一个AQS来实现的。同时讨论了为什么有了Synchronized关键字之后还要有Lock。 我们知道Synchronized关键字是Monitor机制在Java中的一种具体实现,每个对象都有wait()、notify()和notifyA...
2019-11-12
Java
Java
Read More
Java泛型
为什么要有泛型 它的一个主要目标是将运行时才能发现的错误转移到编译期。 泛型是什么 所谓泛型,就是将类型参数化,即把类型也作为一种参数。如何做到这点呢?通过解耦类或方法与所使用的类型之间的约束。 表面使用 泛型类 1234567891011121314151617181920212223242526public class GenericsDemo <T> { p...
2019-10-31
Java
Java
Read More
Java中的finalized方法
finalize是什么 finalize()是定义在Object类中的一个方法,用于垃圾回收。 finalize原理 当JVM的GC打算回收某个对象时,如果这个对象覆盖了finalize()方法,并且finalize()方法没有被执行过,会把这个对象放在一个叫做F-Queue的队列中,稍后由一个由虚拟机自动建立的,低优先级的Finalizer线程去触发finalize的执行。稍后GC将对F-...
2019-10-27
Java
Java
Read More
Java中的异常
参考 Java提高篇——Java 异常处理
2019-10-27
Java
Java
Read More
Java中的内部类
分类 成员内部类 得先创建外部类,然后才能创建内部类。 保存了一个指向外部对象的引用,所以可以访问外部对象的成员。 方法内部类 匿名内部类 匿名类没有名字,继承自父类或者实现了某个接口,它是没有构造器的,因为它连名字都没有。 通过使用实例初始化,就能达到为匿名内部类创建一个构造器的效果(其实就是在定义类的时候在大括号里面再加个大括号写入想要初始化的内容)。 静态内部类(嵌套类 Nested ...
2019-10-22
Java
Java
Read More
Java中的ReentrantReadWriteLock
ReentrantReadWriteLock 看下它的类图 可以看到ReentrantReadWriteLock实现了ReadWriteLock接口。ReadWriteLock就是读写锁的意思,那么问题来了,为什么要有个读写锁呢?为什么要把读锁和写锁分开呢?这里就是出于对性能的考虑了,多个线程之间,可以同时读,但是不可以同时写或者一个读一个写,所以分开之后,读锁和写锁各司其职,可以提高效率...
2019-10-17
Java
Java
Read More
Java中的AQS
AbstractQueuedSynchronizer 简写AQS, 队列同步器,是用来构建锁或者其他同步组件的基础框架,Lock接口的实现,如ReentrantLock等都有它的身影,都是通过它来实现线程同步的。从名字可以看出,首先它是个同步器,其次它里面还有个队列。 AQS使用了模板方法模式,这意味着AQS类里面大体有两种方法:需要被子类重写的涉及到具体细节的方法和模板方法,而模板方法就...
2019-10-17
Java
Java
Read More
Java中的Lock
Lock是JUC包中的一个接口,是在synchronized关键字之后出现的,用来提供锁的功能,本文主要讨论Lock接口以及其实现类,以及为什么有了synchronized关键字了还要有Lock. synchronized作为内嵌的Java关键字,其可以隐式地获取和释放锁,它简化了同步的管理,同时也固化了锁的获取和释放,缺少灵活性。 在Java SE 5 之后,新增了Lock接口(以及相...
2019-10-16
Java
Java
Read More
Java中的final关键字
用法 修饰变量 修饰基本类型:基本类型的值不可被改变 修饰引用:引用的指向不能被改变 被final修饰的基本类型和String类型会在编译器被放到常量池 修饰方法 方法不可被覆盖 修饰类 类不可被继承 原理 我们反编译如下代码: 123456789public final class Tiger { private final String name ="tige...
2019-10-11
Java
Java
Read More
Java中new对象时到底发生了什么
Java中有许多创建对象的方式,比如使用new关键字,使用反射,使用序列化/反序列化,使用克隆,其内部原理也都不一样,本文主要讨论在使用new关键字创建对象的前前后后JVM都做了那些事。要讲清楚这个事情,需要了解一定的JVM内存模型,以及类加载机制。 ###缘起 首先要明白,创建对象这是一个运行期的动作,在运行期前面,还有一个编译期。编译期就是将我们写的java文件编译成class文件的过程...
2019-10-10
Java
Java
Read More
Previous
3 / 5
Next