![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 80
莫秃
没有人比我更懂bug
展开
-
刷题大王--二叉树套餐
二叉树非递归遍历前序//先序非递归遍历:使用栈的数据结构,先入右侧节点。 public static void preOrder(TreeNode root){ TreeNode p = root; Stack<TreeNode> stack = new Stack<>(); while (p != null || !stack.isEmpty()){ if (p != null){原创 2021-07-29 19:13:09 · 110 阅读 · 0 评论 -
深入理解JAVA多线程---对synchronized的锁优化
Synchronized优化前言JDK1.6之前JDK1.6之后一.锁升级偏向锁为什么引入偏向锁偏向锁的升级偏向锁的撤销偏向锁的取消轻量级锁为什么引入轻量级锁轻量级锁加锁轻量级锁解锁和膨胀几种锁的对比二.锁粗化三.锁消除前言在多线程并发编程中Synchronized一直是元老级的角色,很多人都称呼它为重量级锁.但是随着JDK1.6对Synchronized进行了各种优化之后,有些情况下它并不呢么重了,那么接下来我们就学习一下究竟进行了那些优化.JDK1.6之前在JDK1.6之前Synchronize原创 2021-01-15 23:08:32 · 107 阅读 · 0 评论 -
深入理解JAVA多线程---对象及变量的并发访问(synchronized和volatile关键字)
synchronized和volatile关键字前言线程不安全问题解决线程不安全问题synchronized实现原理volatile前言在多线程开发过程中,难免遇到很多线程不安全的问题,例如多个线程对一个变量进行访问和修改,就会产生"脏读".因此利用好synchronized和volatile关键字是多线程的关键一步.线程不安全问题首先我们来看一段线程不安全的代码:public class synchronizedAndVolatile { public static int i = 0;原创 2021-01-13 23:46:03 · 189 阅读 · 0 评论 -
深入理解JAVA多线程---多线程的常用操作
多线程常用操作线程启动(start())线程名称的设置和获取线程休眠(sleep())线程让步(yield())等待线程终止(join())线程停止运行(wait())唤醒线程(notify())唤醒全部线程(notifyAll())线程的停止线程的优先级线程启动(start())上文中已将提到了线程的几种创建方法,当线程创建后调用start()方法就可以启动线程了. //线程类继承Runnable接口 static class MyThread implements Runnable{原创 2021-01-09 00:25:24 · 113 阅读 · 0 评论 -
深入理解JAVA多线程---线程的几种创建方法
多线程前言什么是进程?前言现代计算机的处理能力越发的强大,多线程可谓是程序员必须要熟练应用的技能,本人将记录自己学习多线程总结出来的要点希望对读者有一丝的启发.文章大部分来自书籍JAVA多线程编程核心技术,也推荐大家对多线程有一定了解后去品读一定会有很多的收获.什么是进程?在学习多线程之前我们必须要对进程和线程有着很清晰的认识.进程:...原创 2021-01-03 00:51:54 · 228 阅读 · 1 评论 -
深入理解JVM---垃圾收集器
垃圾收集器HotSpot中的垃圾收集器Serial收集器Serial Old收集器(标记-整理算法)ParNew 收集器(复制算法)Parallel Scavenge收集器(复制算法)Parallel Old收集器(标记-整理算法)CMS收集器(标记-清除算法)G1垃圾收集器G1收集器的特点:HotSpot中的垃圾收集器Serial收集器新生代单线程收集器,收集和标记都是单线程,意味着它只会使用一个 CPU 或一条收集线程去完成收集工作,并且在进行垃圾回收时必须暂停其它所有的工作线程直到收集结束。原创 2020-12-27 17:49:16 · 86 阅读 · 0 评论 -
深入理解JVM---垃圾回收机制
垃圾回收机制垃圾回收机制垃圾垃圾判断算法引用计数算法垃圾回收机制程序运行过程中难免产生一些不被引用的对象和数据占用JVM的空间,这就是我们所说的"垃圾".C 和 C++ 都需要程序员手动去处理这些垃圾,而JAVA的JVM中的垃圾回收机制自动的就实现了’内存动态分配’和’垃圾回收’(GC).垃圾什么是垃圾?要想进行垃圾回收就先确定什么是垃圾,在JVM眼中,"垃圾"是指堆中"不再被引用"的对象垃圾判断算法引用计数算法在对象中添加一个计数器,当对象被引用的时候计数器就加1,当引用失效原创 2020-11-26 20:35:40 · 138 阅读 · 0 评论 -
深入理解JVM---类加载
类加载的过程当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化1.加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。...原创 2020-11-23 21:34:53 · 152 阅读 · 2 评论 -
常见的七大排序(冒泡,插入,选择,归并,堆,快速,希尔)
七大排序一:直接插入排序二:希尔排序三:选择排序四:堆排序五:冒泡排序六:快速排序七:归并排序排序复杂度总结一:直接插入排序原理:整个区间被分为:有序区间无序区间每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入//插入排序public static void inSort(int[] n){ for (int i = 1; i < n.len...原创 2020-04-14 20:32:44 · 251 阅读 · 0 评论 -
数据结构------优先级队列(堆)
堆概念:堆逻辑上是一棵完全二叉树堆物理上是保存在数组中满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆反之,则是小堆,或者小根堆,或者最小堆堆的基本作用是,快速找集合中的最值如何构建一个堆呢?首先建堆需要借助一个调整的过程,根据需要向上或者向下调整根节点的位置,然后从第一个非叶子节点开始进行调整,就可以得到一个堆.代码实现: //从最后一个非叶子节...原创 2020-04-13 18:06:02 · 157 阅读 · 0 评论 -
数据结构------二叉树
二叉树概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点.二叉树的子树有左右之分,其子树的次序不能颠倒.两种特殊的二叉树完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个...原创 2020-04-08 20:53:47 · 125 阅读 · 0 评论