- 博客(8)
- 收藏
- 关注
原创 Java 多线程的应用场景
电影院新片首映,观影人数大量增加,为提高日营业额,线下售票窗口由原单窗口调整为3窗口,设计一段简单的程序模拟该售票过程。
2022-05-01 12:21:41
14174
31
原创 单例模式的简单实现
什么是单例模式?概念:23种设计模式之一,通过单例模式的方法创建的类在整个应用程序中只有一个实例。核心思想:构造方法私有化实现方式单利模式的实现方式有很多,在此简单介绍以下几种写法饿汉式懒汉式双重检测锁模式静态内部类枚举类代码示例饿汉式:类加载的时候就创建该类的唯一实例对象,天生线程安全。无论该对象是否被使用,在类加载的时候都会被创建,一定程度上导致内存资源的浪费。//饿汉式单例public class Hungry { private Hungry() { }
2022-03-19 15:04:04
831
17
原创 ThreadLocal的使用及内存泄漏问题分析
ThreadLocal原理概述每一个Thread对象均含有一个ThreadLocalMap类型的成员变量threadLocals,它存储当前线程中所有ThreadLocal对象及其对应的值。部分源码如下public class Thread implements Runnable { /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */
2021-04-16 14:57:56
1828
11
原创 HashMap的初始容量(位运算详解)
我们在日常学习和研发中,经常会接触一些底层的源码,有些小伙伴在遇到位运算(提高系统的运行效率)实现的方法时,读起来就有些吃力了,例如HashMap类中的tableSizeFor(int cap)方法,源代码如下。 /** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arguments. * MUST
2021-04-04 18:38:12
4850
27
原创 Java 反射机制的应用
Java 反射机制的应用Java反射机制允许程序在运行时通过Reflection API获得类的全部信息,并拥有访问权。目录反射的触发时机反射的应用场景案例演示反射的触发时机要想知道反射在什么时候起作用,就得先了解一下类加载过程,冯·诺依曼定义的计算机模型中,任何程序都需要加载到内存才能与CPU进行交流。字节码.class文件同样需要加载到内存中,才可以实例化。类加载就是一个将.class字节码文件生成Class对象并进行相关初始化的过程。根据上图便能够清楚的看到反射是在程序运行期间发
2021-03-31 20:56:28
2278
8
原创 Java 冒泡排序
Java 冒泡排序以升序排序为例,从上往下,两两之间进行比较,若上面的数比下面的数大,则交换位置,也就是较大者下沉,这样每一轮比较结束都会产生一个本轮次的最大值,较小的数就会不断向上移动,好像气泡向上漂浮一样。特点: 升序排序中每一轮比较会把最大的数沉到最底,所以每一轮比较的次数都会比上一轮少一次。为了方便大家理解,我做了一张动图来演示这一过程。冒泡排序动画演示:思路分析:如上图所示, 黄,绿,蓝,红 分别表示冒泡排序的4轮比较第一轮[黄色] 比较了4次第二轮[绿色] 比较了3次第三轮[
2021-03-28 14:29:14
2365
18
原创 Java for循环打印菱形
Java for循环打印菱形Java代码输出菱形的的方法和思路有很多,在此分享一个稍带模块化拆分思想的解决方案,将需要输出的菱形拆分成8个模块(如下图),每个模块独立实现输出。优点:8个模块之间耦合性降低,灵活性增强。也就是说我们可以独立的控制这8个模块中任意一个模块的输出内容来灵活应对业务逻辑的变更。按照上图标好的顺序依次实现这8个模块的代码,当1458模块输出为空格时,其中2367模块的组合,就是一个菱形。思路分析: 1 ######*###### 第一排 模块1[
2021-03-26 21:35:08
4237
14
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人