
Java基础
文章平均质量分 82
Lebron_Chen
这个作者很懒,什么都没留下…
展开
-
带你详细了解clone方法
说到clone,工作中可能使用到的不多,所以今天就给大家讲一下。clone方法是Object类的一个方法可能大家都知道,但是可能很多人都没有注意到clone方法的修饰符,我们来看一下源码public class Object { * @throws CloneNotSupportedException if the object's class does not ...原创 2018-07-18 00:24:53 · 1001 阅读 · 0 评论 -
finalize()方法总结
class Object { ... protected void finalize() throws Throwable { }}finalize()方法是Object类的一个protected方法,所以所有的类都可以调用Object类的finalize()方法,也可以自己去重写finalize()方法。GC对不可达对象的两次扫描首先需要知道的是大多数虚拟机会使...原创 2018-08-13 23:31:05 · 1911 阅读 · 1 评论 -
强引用、软引用、弱引用、虚引用
我们经常会说某个引用指向某个实例对象,这里的”引用”通常指的是强引用,在Java中还有软引用、如哦引用和虚引用。下面我们来了解一下这四种引用。强引用(Strong Reference)通常我们Object obj = new Object();像obj这样的引用被称为强引用,也是我们Java开发中最多使用到的引用方式。这种引用只要还存在,垃圾收集器就不会回收该引用指...原创 2018-08-13 21:27:51 · 185 阅读 · 0 评论 -
Java集合基本介绍
在Java中我们经常使用到集合,集合是帮我们存储数据的,可以理解为一个容器。在JDK中集合类都在java.util包中,下面按照容器特性区分一下我们常用的集合: - Collection: 集合中存储的是普通对象 - List: 有序,可重复 - Set:不可重复 - Queue: 有序,先进先出 - Map: 集合中存储的是成对出现的”键值对”对象我们先...原创 2018-08-02 22:41:17 · 314 阅读 · 0 评论 -
线程池ThreadPoolExecutor的使用和原理
引子通常我们在需要异步调用一个任务的时候,会手动创建一个线程去执行异步任务,但是每次手动启动一个线程,使用完毕就丢弃了,太浪费资源。所以线程池的概念就出来了,就跟数据库连接池一样。通常创建和销毁比较耗费资源的连接都会使用“池”来管理。线程池的好处降低资源消耗:通过已创建的线程来执行异步任务,降低了线程创建和销毁的消耗提高响应速度:异步任务不需要等待线程创建的时间,直接使用创...原创 2018-08-02 22:37:57 · 236 阅读 · 0 评论 -
ThreadLocal的原理和使用
引子前几天有一篇文章分享了SimpleDateFormat类在多线程情况下不安全的问题,文章中也提到了使用ThreadLocal来解决的这种办法,今天就来给大家介绍一下ThreadLocal。由于SimpleDateFormat类线程不安全,所以我们不能用public static修饰一个SimpleDateFormat变量来共多个线程使用。既然多个线程不能公用同一个SimpleDat...原创 2018-08-02 22:35:23 · 231 阅读 · 0 评论 -
JDK动态代理和CGlib代理的区别
我们通常说的动态代理主要有JDK的动态代理和CGLIB代理,Spring的AOP也是基于这两种代理实现的。下面我们先从代码上来了解一下这两种代理。被代理类public class Teacher implements Person { public void sleep(){ System.out.println("sleeping"); }...原创 2018-08-06 20:56:45 · 353 阅读 · 0 评论 -
怎样让线程停止
上一篇文章讲到了interrupt()、interrupted()、isInterrupted()这三个方法,最后留了个尾巴,那么今天这一篇文章就给大家讲一下怎样停止线程。stop()方法说到线程停止,第一个想到的办法就是Thread类的stop()方法,下面就先讲一下stop()方法。@Deprecatedpublic final void stop() { ......原创 2018-07-22 23:33:05 · 1182 阅读 · 0 评论 -
如何区分interrupt()、interrupted()、isInterrupted()
看到标题上那三个兄弟了吗,看起来跟孪生兄弟一样,傻傻分不清楚。很多人可能都知道这些方法,但是又不太能分清,所以给大家带来这篇文章,带大家一起区分一下这三个方法。首先这三个方法都是Thread类的方法,按照惯例,介绍方法,先看源码interrupt()public void interrupt() { if (this != Thread.currentThread(...原创 2018-07-22 23:32:36 · 669 阅读 · 0 评论 -
SimpleDateFormat的线程安全
SimpleDateFormat是我们格式化时间格式时常用到的一个类,通常情况下我们需要使用到它时,都会new一个新的对象出来,所以不会遇到多线程场景下的线程安全问题。下面带大家一起了解一下为什么SimpleDateFormat时线程不安全的,以及解决办法。当然如果你说我就每次使用到它的时候new一个新的对象出来不就行了吗,那么我只能说,兄dei,我也是这么干的。但是如果你有空的话也可...原创 2018-07-15 01:10:07 · 527 阅读 · 0 评论 -
你可能不知道的String类
一直很喜欢一句话,如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本没弄懂。这句话很适合我们这些技术人,程序员的世界里不应该出现模糊的概念,遇到一些拿捏不准的东西需要及时理解透彻。String类是我们每天需要使用到无数次的对象,工作中直接拿来用就好了,很少会再去细细的琢磨琢磨String,这里就带大家一起琢磨琢磨String。String的内存分配String是一个不可变的对象...原创 2018-07-14 22:11:22 · 343 阅读 · 0 评论 -
GC怎么判断对象死亡的
引用计数器算法引用计数器算法是通过一个计数器来实现的: - 给每个对象添加一个引用计数器 - 如果新增一个引用,那么引用计数器加一 - 如果失去一个引用,那么引用计数器减一 - 如果引用计数器等于零,那么理解为这个对象死亡这就是引用计数器算法,实现简单并且判定效率高,但是这个算法存在一个致命的问题,会导致内存泄漏。先看下面的例子:1 public class Refe...原创 2018-08-21 17:10:40 · 602 阅读 · 0 评论