zoukankan      html  css  js  c++  java
  • 线程上下文类加载器和volatile

    线程的上下文类加载是JDK1.2开始引进,分别获取和设置当前线程的上下文类加载,如果没有设置,那么就会和父线程的类加载器保持一致。
    为什么要有线程上下文类加载器?

    • Jvm的双亲加载即有一定缺陷,JDK核心类库提供很多spi,包括jdbc、jbi、JCE等等,Jdk只规定了这些接口之间的逻辑关系,但不提供具体实现。

    例如:Jdbc这个类库在加载的时候想要实现透明化,又不想与JDK核心库绑定,但是由于双亲委托机制的限制,启动类加载器不可能加载到第三方厂商提供的具体实现。为了解决这个缺陷,JDK只能提供一种不怎么好的方式–线程上下文类加载,委托子类加载器加载第三方厂商的具体实现。

    了解volatile之前需要了解一下计算机的cpu情况:
    CPU是计算机的核心,所有计算运行的时候都是有CPU寄存器完成的,CPU指令的执行过程需要涉及数据的读取和写入,但内存速度跟不上cpu的速度,这时候就需要CPU Cache ,cpu的缓存分为三级,每一级的数据量不一样,这就出现CPU的缓存一致问题。
    目前解决缓存不一致问题有:

    • 通过总线加锁的方式
    • 缓存一致性的协议

    Java内存模型
    指定了Java虚拟机如何向计算机内存进行工作。
    其定义了线程和内存之间的抽象关系:

    • 共享变量存储于主内存之间,每个线程都能访问。
    • 每个线程都有私有的工作内存或者成为本地内存
    • 工作内存只存储该线程对共享变量的副本
    • 线程至于先操作了工作内存才可以操作主内存
    • 工作内存和Java内存模型一样也是一个抽象概念,实际并不存在,它涵盖了缓存,寄存器、编译器优化以及硬件等。
    • 希望能交流更多技术,关注小白的微信公众号吧。
      在这里插入图片描述
    小白技术社
  • 相关阅读:
    博客搬家申请CSDN至博客园
    关于java8新特性的一些总结
    mysql数据库插入时更改数据
    2017总结
    java中单链表的操作
    工厂设计模式及理解
    筛选法求素数
    tcp粘包,断包问题及处理
    理解B树,B+树
    jvm中锁的优化
  • 原文地址:https://www.cnblogs.com/xbjss/p/13326680.html
Copyright © 2011-2022 走看看