自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 ReentrantLock非公平锁加锁源码解析

几个类和接口的关系图:结合后文加锁流程一步步看,先从ReentrantLock构造器开始看,

2024-11-11 09:45:03 589

原创 wait和notify

● wait() 方法会释放对象的锁,进入 WaitSet 等待区,从而让其他线程就机会获取对象的锁。无限制等待,直到notify 为止● wait(long n) 有时限的等待, 到 n 毫秒后结束等待,或是被 notify● obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒● obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。

2024-11-02 10:19:32 555

原创 synchronized锁升级

轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是 synchronized假设有两个方法同步块,利用同一个对象加锁1.创建 锁记录(Lock Record)对象,每个线程的栈帧都会包含一个锁记录的结构,内部可以存储锁定对象的Mark Word。

2024-11-01 16:14:55 1074 1

原创 多线程中Monito、对象头的作用

64位对象头由Mark Word、klass pointer两部分组成,如果对象是数组,则还要加上数组长度,即三部分组成。age:Java GC标记位对象年龄,4位的表示范围为0-15,因此对象经过了15次垃圾回收后如果还存在,则肯定会移动到老年代中。biased_lock:偏向锁标记,为1时表示对象启用偏向锁,为0时表示对象没有偏向锁。

2024-10-31 16:31:06 293

原创 Stream流

因为原来的Stream流只能使用一次,stream1在之前已经用过了,返回一个新的流给了stream2,原来的流已经关闭了,因此无法再次使用stream1获取流。当map方法执行完毕之后,流上的数据就变为了整数,所以在下面forEach当中:s依次表示流里面的每一个数据,这个数据现在就是整数了。修改Stream流中的数据,并不会影响原来的集合或者数组中的数据。apply的形参:流中的数据的个数,要跟数组的长度保持一致。中间方法,返回新的Stream流,原来的Stream流。

2023-05-22 09:37:11 645 1

原创 Lambda表达式

这里使用Arrays类的sort方法作为示例。

2023-05-17 15:49:40 115 1

原创 java多线程

文档参考和。

2023-04-11 12:04:43 130 1

原创 java注解

注解内置注解1.@Override2.@Deprecated3.@SuppressWarnings(value=" ")元注解(meta-annnotation)1.@Target(value ={} )2.@Retention(value = )3.@Documented4.@Inherited自定义注解内置注解1.@Override //重写注解 @Override public String toString() { return super.toString()

2022-03-20 16:18:22 224

空空如也

空空如也

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

TA关注的人

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