- 博客(8)
- 收藏
- 关注
原创 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
原创 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关注的人