管程:monitor(监视器)也就是平时说的锁

用户线程:系统工作线程

守护线程(daemon):一种特殊线程为其他线程服务。举例:垃圾回收线程

FutreTask 缺点:get()阻塞线程 ,isDone轮询容易造成cpu浪费

CompletableFuture 提供类似观察者模式机制,可以让任务执行完成通知监听的一方

thenApply()计算依赖串行化(关联异常阻断流程)、handle()计算依赖串行化异常不阻断流程

thenAccetp()计算依赖串行化消费没有返回结果

thenRun()没有输入参数,A执行完执行b,B不依赖A结果

image-20221115165649792

synchronized 锁的是资源类,锁的是this

image-20221116120744913

AtomicMarkableReference 解决一次问题,false,true.如果修改过后续操作不更新
AtomicStampedReference 多次,versioin号+1

LongAdder :分散热点,内部有一个base变量,一个cell[]数组

threadLocal :

1.4.3.1.1.1. 对象头

image-20221116213033392

image-20221116213115267

/*
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.9</version>
</dependency>
*/

import org.openjdk.jol.info.ClassLayout;

public class JolDemo{
  public static void main(String[] args){
    Object o = new Object();
    System.out.println(ClassLayout.parseInstance(o).toPrintable());
  }
}
/*
com.example.demo.JOLDemo object internals:
 OFFSET  SIZE               TYPE DESCRIPTION                               VALUE
      0     4                    (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4                    (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4                    (object header)                           05 c1 00 f8 (00000101 11000001 00000000 11111000) (-134168315)
     12     4                int JOLDemo.a                                 0
     16     8             double JOLDemo.aDouble                           0.0
     24     8               long JOLDemo.aLong                             0
     32     4              float JOLDemo.aFloat                            0.0
     36     2               char JOLDemo.aChar                             
     38     1            boolean JOLDemo.aBoolean                          false
     39     1               byte JOLDemo.aByte                             0
     40     4   java.lang.String JOLDemo.b                                 null
     44     4                    (loss due to the next object alignment)
Instance size: 48 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

*/

空对象占用大小

image-20221116214844002

偏向锁:锁总是一个线程持有,很少发生竞争,这个线程就是锁的偏向线程,锁操作不涉及用户到内核转换。

-XX:+UseBiasedLocking 代表是否开启偏向锁,jdk6之后默认开启

-XX:BiasedLockingStartupDeplay 开启后延迟时间

轻量级锁:检查锁在同步块进行等待,没有升级轻量级锁。本质就是CAS

重量级锁:jdk6之前自旋到一定次数或程度会升级到重量级。默认自旋次数10次

jdk6之后自适应自旋次数和上一次自旋时间拥有锁线程状态来决定。

区别:争夺轻量级锁失败时,自旋锁尝试抢占锁。

轻量级锁每次退出同步块都需要释放锁,而 偏向锁在竞争发生时才释放锁

results matching ""

    No results matching ""