摘要: volatile是轻量级的synchronized,如果volatile变量修饰符使用恰当,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换(线程间的保存到再加载)和调度。 内存可见性多线程操作的时候,一个线程修改了一个变量的值 ,其他线程能立即看到修改后的值。防止重 阅读全文
posted @ 2019-07-31 13:37 Nausicaa0505 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 类的生命周期 加载、连接、初始化、使用和卸载 加载,查找并加载类的二进制数据,加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。 连接,当类被加载之后,系统为之生成一个对 阅读全文
posted @ 2019-07-31 12:50 Nausicaa0505 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 堆和栈的平衡 x86的机器上的 进程 最多可以使用 2048mb的内存, 该Java进程剩下的内存由, 方法区,程序计数器,虚拟机栈,本地方法栈 共同使用。 虚拟机栈使用的空间 = 2048- Xmx(最大堆容量)-MaxPermSize (最大方法区容量) - 本地方法栈 我们知道,一个线程对应一 阅读全文
posted @ 2019-07-30 22:09 Nausicaa0505 阅读(141) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch 倒数计数器 一个线程等待其他所有线程 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用Coun 阅读全文
posted @ 2019-07-30 21:13 Nausicaa0505 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点小结: 看输出父节点的顺序,就确定是前序,中序还是后序。 创建如下图二叉树并写出其遍历、查找、删除方法。 创建二叉树 先创建HeroNode结点 p 阅读全文
posted @ 2019-07-30 16:05 Nausicaa0505 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 1、数组 2、栈 3、队列 4、链表 5、树 6、散列表 7、堆 8、图 数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。 定义一个数组: int[] data = new int[100]; 优点: 1、按照索引查询元素 阅读全文
posted @ 2019-07-30 13:21 Nausicaa0505 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 转自 https://www.cnblogs.com/maybe2030/p/4715035.html 部分内容来自尚硅谷视频 1. 顺序查找 2. 二分查找 3. 插值查找 4. 斐波那契查找 5. 树表查找 6. 分块查找 7. 哈希查找 查找算法 查找定义:根据给定的某个值,在查找表中确定一个 阅读全文
posted @ 2019-07-29 18:17 Nausicaa0505 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 排序算法一般分别是冒泡排序、快速排序、直接插入排序、希尔排序、简单选择排序、堆排序、归并排序和基数排序,如果按原理划分,冒泡排序和快速排序都属于交换排序,直接插入排序和希尔排序属于插入排序,而简单选择排序和堆排序属于选择排序。 选择排序 扫描所有元素,将最小的与第一位交换位置,再扫描除第一位以外最小 阅读全文
posted @ 2019-07-29 18:05 Nausicaa0505 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。 线程池的工作原理 先判断线程池中核心线程池所有的线程是否都在执行任务。如果不是,则新创建一个线程执行刚提交的任务,否则,核心线程池中所有的线程都在执行任务,则进入第2步; 判断 阅读全文
posted @ 2019-07-26 16:44 Nausicaa0505 阅读(142) 评论(0) 推荐(0) 编辑
摘要: java.util.concurrent. locks包结构如下 Lock 在Lock接口出现之前,java程序主要是靠synchronized关键字实现锁功能的,而java SE5之后,并发包中增加了lock接口,它提供了与synchronized一样的锁功能。虽然它失去了像synchronize 阅读全文
posted @ 2019-07-26 15:28 Nausicaa0505 阅读(494) 评论(0) 推荐(0) 编辑