自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java并发编程:CountdownLatch使用

翻译过来是倒计时锁,又叫倒计时门闩,会让一个线程等待其他线程完成倒计时后才会恢复运行,是 join 功能的一个扩展。

2023-04-19 10:34:07 166

原创 Java并发编程:Semaphore信号量

用 Semaphore 实现简单连接池,对比『享元模式』下的实现(用wait notify),性能和可读性显然更好,注意下面的实现中线程数和数据库连接数是相等的。,资源数比如享元模式下的数据库连接池的 poolSize,或者说是线程池的核心线程数(例如连接数,请对比 Tomcat LimitLatch 的实现)所以,资源数和线程数一样的时候,这时候用信号量就合适了,比如数据库连接池,下面我将对之前实现的数据库连接池做一个改进。

2023-04-18 10:32:39 112

原创 Java基础:函数式接口分类

function 函数 一个参数一个结果 (参数)->结果。consumer 消费者 一个参数没结果 (参数)->void。BiConsumer (参数1,参数2)->void。supplier 提供者 无中生有 ()->结果。BiFunction (参数1,参数2)->结果。

2023-04-17 08:28:45 96

原创 Java并发编程:死锁场景之哲学家就餐问题

这是一个常见的死锁场景题目来源是力扣自己去搜就行了,下面直接上代码上述情况就容易发生5个哲学家都拿着一根筷子同时也想拿另一根筷子就陷入了死锁。

2023-04-16 15:41:06 180

原创 JVM虚拟机:JIT即时编译器优化之逃逸分析 | 方法内联

那么既然即时编译器速度远快于解释器,为什么不直接使用即时编译器呢,对于占据大部分的不常用的代码,我们无需耗费时间将其编译成机器码,而是采取解释执行的方式运行;JIT 如果发现这个 square 方法比较短,只有 1 行,而且方法多次调用,就会进行内联,所谓的内联就是把方法内代码拷贝、粘贴到调用者的位置,如下。因为 JIT 发现这些对象创建了又不用,还创建了这么多次,干脆在下次创建的时候就不创建了,这就叫逃逸分析,逃逸分析会在 C2 编译器执行。加一个虚拟机参数 -XX:-DoEscapeAnalysis。

2023-04-13 21:25:20 130

原创 JVM虚拟机:普通方法JVM指令流程图解

javap 指令能够将 .class 字节码指令反编译成人类稍微能够理解的代码具体用法是 javap -v xxxx.class,-v 就是查看详细信息下面是输出示例对应之前还需要查表的 .class 文件,这个就显得清晰明了。

2023-04-12 10:07:58 141

原创 Java并发编程:wait和notify的正确使用姿势

小南线程必须睡足 2s 后才能醒来,就算烟提前送到,也无法立刻醒来,加了 synchronized (room) 后,就好比小南在里面反锁了门睡觉,烟根本没法送进门,main 没加。notify 只能随机唤醒一个 WaitSet 中的线程,这时如果有其它线程也在等待,那么就可能唤醒不了正确的线程,称之为【虚假唤醒】送烟线程调用notify() 时会不会错误的叫醒其它线程,叫做虚假唤醒。未能开始工作的可以继续等待下一轮外派线程的指令。其它干活的线程,都要一直阻塞,效率太低。其它5个线程是正常线程。

2023-04-10 09:21:09 87

原创 Java并发编程:线程安全单例习题

readResolve 可以防止反序列化生成新对象 用的是readResolve 返回的实例。静态内部类实现方式,由于静态内部类只会实例化1次,每次拿到的都是同一个对象,都是静态常量。这是一个懒汉式单例,synchronized 注意需要锁引用不能是。判断是为了防止首次加锁2个线程进入创建2个实例的情况。不能,反射是不用走构造方法的,枚举可以防反射。并且该方法线程安全,并且是懒汉式,推荐使用。缺点是锁的范围比较大,每次调用。请阅读下列代码并回答注释问题。请阅读下列代码并回答注释问题。

2023-04-09 21:35:58 46

原创 网络基础:TCP三次握手和四次挥手

首先注意一点,seq不是随机生成的,是在发报文过程中慢慢增长上来的;由于客户端主动发送断开请求,此时服务端还有部分数据没有发送,所以只回复了ACK位,剩余数据发送完毕后后才可断开连接。在第二次服务器给客户端发送ACK位致1,ack=seq+1后,客户端收到了,但是服务端不知道客户端是否收到数据,需要客户端再次握手,达到双工的效果。回复了ACK位,剩余数据发送完毕后后才可断开连接。面向连接的,安全可靠的连接。

2023-04-07 16:10:27 32

原创 Java基础:stream的基本使用

将list集合中姓张的元素过滤到一个新的集合,然后将过滤出来的姓张的元素中,再过滤出来长度为3的元素,存储到一个新的集合中。获取字段平均值,汇总某字段并转换成String,按照字段一级二级分组,转换成其它集合类型。获取最长/短字符串,获取最大/小值,集合泛型最值和元素数量。过滤器筛选,去重和获取第一个元素。

2023-04-06 08:31:37 90

原创 Java基础:hashcode关联equals

因此,在Java中,实现hashCode方法和equals方法时,必须保证它们的语义一致,即如果两个对象相等,那么它们的hashCode值必须相等,反之亦然。例如,如果两个对象的equals方法返回true,但它们的hashCode值不相等,那么在使用HashMap等哈希表时,就可能会将它们放入不同的桶中,从而导致无法正确地查找和访问这些对象。如果两个对象的equals方法返回true,那么它们的hashCode值必须相等,否则会导致在使用哈希表等数据结构时出现问题。

2023-04-05 18:40:20 79

原创 Java并发编程:DCL双重检查锁 | volatile解决指令重排问题

在双重检查锁中,首先检查实例是否已经被创建,如果没有被创建,则进行同步操作,然后再次检查实例是否已经被创建。正常情况下,singleton = new Singleton()的步骤是按照1->2->3这种步骤进行的,但是一旦JVM做了指令重排序,那么顺序很可能编程1->3->2;,但是另一个线程进来时发现,singleton不等于null了,就这样把半成品的实例返回去,调用是会报错的。如果是这种顺序,可以发现,在3步骤执行完singleton对象就不等于null,的操作,这里的指令,指的是CPU层面的。

2023-04-04 17:00:13 763 1

原创 Java集合:HashMap二次hash | 扩容机制 | 并发死链

HashMap的扩容机制是指当HashMap中的元素数量超过了负载因子(load factor)与容量(capacity)的乘积时,就会自动扩容,以保证HashMap的性能和效率,比如负载因子是0.7,容量是10,在元素数量达到8的时候就会触发扩容。而二次hash算法则是在计算哈希值时,使用了两个不同的哈希函数,以增加哈希值的随机性,从而减少哈希冲突的概率。在扩容过程中,HashMap会将原有的桶中的元素重新分配到新的桶中,这个过程可能会导致哈希冲突的发生。

2023-04-03 17:15:05 638 1

Java代码:文件批量乱码.md

文件批量乱码 请勿用于非法途径 代码仅供参考

2023-04-17

Java代码:批量替换文件内容

批量替换文件内容 源码仅供参考

2023-04-16

测试代码:Java实现随机生成姓名.md

源码仅供参考 欢迎下载使用

2023-04-12

Java代码:实现图片转字符画

图片转字符画 有点偏娱乐风格的代码 欢迎下载使用

2023-04-09

面试题:Java基础面试题源码资料.zip

Java基础面试题源码资料 源码仅供参考 欢迎下载学习

2023-04-07

项目演示:JavaWeb简单erp项目案例.zip

JavaWeb项目 源码仅供参考 欢迎下载学习

2023-04-06

项目演示:springbootOA办公系统.zip

OA办公系统项目案例 源码仅供参考

2023-04-05

项目演示:springboot整合shiro.zip

springboot整合shiro案例 代码仅供参考

2023-04-04

项目演示:springboot整合redis.zip

springboot项目整合redis的例子 项目仅供参考

2023-04-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除