摘要: 线程池将线程和任务进行解耦,线程是线程,任务是任务,拜托了之前通过Thread创建线程时一个线程必须对应一个任务的限制 在线程池中,同一个线程可以从阻塞队列中不断获取新任务来执行,其核心原理在于线程池对Thread进行了封装,并不是每次执行任务都会调用Thread.start()来创建新线程,而是让 阅读全文
posted @ 2021-05-20 15:39 刘指导 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 1、一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务。 阻塞队列可以保证任务队列中没有任务时阻塞来获取任务的线程(即线程池中没有任务时,阻塞核心线程),使得线程进入wait状态,释放cpu 阻塞队列自带阻塞和唤醒 阅读全文
posted @ 2021-05-20 15:33 刘指导 阅读(1085) 评论(0) 推荐(0) 编辑
摘要: 1、降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。 2、提高响应速度;任务来了,直接就有线程可用可执行,而不是先创建线程,在执行。 3、提高线程可管理性;线程时稀缺资源,使用线程池可以统一分配调优监控。 corePollSize 代表核心线程数,也就是正常情况下创建工作的线程数,这些线程创 阅读全文
posted @ 2021-05-20 15:15 刘指导 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 内存泄漏为程序在申请内存后,无法释放已申请的内存空间,一次泄露危害可以忽略,但内存泄漏堆积后果很严重,无论多少内存,迟早会被占光。 不再会被使用的对象或者变量占用的内存空间不能被回收,就是内存泄漏。 强引用:使用最普遍的一个引用(new),一个对象具有强引用,不会被垃圾收集器回收。当内存空间不足,j 阅读全文
posted @ 2021-05-20 14:39 刘指导 阅读(1407) 评论(0) 推荐(0) 编辑
摘要: 每一个Thread对象均含有一个ThreadLocalMap类型的成员变量threadLocals,它存储本线程中所有ThreadLocal对象及其对应的值 ThreadLocalMap是由一个个Entry对象构成,Entry继承自WeakReference,一个Entry是由ThreadLocal 阅读全文
posted @ 2021-05-20 14:00 刘指导 阅读(646) 评论(0) 推荐(0) 编辑
摘要: 锁池 所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等到CPU资源分配。 等待池 当我们调用wait()方法后,线程会放到等待池当中,等待池的线程 阅读全文
posted @ 2021-05-20 11:09 刘指导 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数器+1,引用释放时计算器 -1,计数为0时可以回收。 可达性分析:从GC Roots开始向下收索,搜索走过的路径成为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,那么虚拟机就判断是可回收对象。 引用计数法, 阅读全文
posted @ 2021-05-20 10:33 刘指导 阅读(489) 评论(0) 推荐(0) 编辑
摘要: java类加载器 jdk自带有三个类加载器:BootstrapClassLoader、ExtClassLoader、APPClassLoader。 BootStrapClassLoader时ExtClassLoader的父类加载器 (这里所说的父类加载器时组合关系,并不是继承关系) 默认负责加载%J 阅读全文
posted @ 2021-05-20 10:04 刘指导 阅读(85) 评论(0) 推荐(0) 编辑
摘要: jdk7 数据结构:ReentrantLock + Segment + HashEntry,一个Segment中包含一个HashEntry数组,每个HashEntry又是一个链表结构 元素查询:二次hash,第一次hash定位到Segment,第二次hash定位到segment中元素所在的链表头部 阅读全文
posted @ 2021-05-20 09:36 刘指导 阅读(66) 评论(0) 推荐(0) 编辑