
java
文章平均质量分 91
学习java
qq_40902295
这个作者很懒,什么都没留下…
展开
-
java的深入探究JVM之类加载与双亲委派机制
前言前面学习了虚拟机的内存结构、对象的分配和创建,但对象所对应的类是怎么加载到虚拟机中来的呢?加载过程中需要做些什么?什么是双亲委派机制以及为什么要打破双亲委派机制?类的生命周期类的生命周期包含了如上的7个阶段,其中验证准备解析统称为连接 ,类的加载主要是前五个阶段,每个阶段基本上保持如上顺序开始(仅仅是开始,实际上执行是交叉混合的),只有解析阶段不一定,在初始化后也有可能才开始执行解析,这是为了支持动态语言。加载加载就是将字节码的二进制流转化为方法区。原创 2024-04-15 11:02:05 · 1616 阅读 · 2 评论 -
java的ThreadLocal深入理解
无论是,我们都会跟打交道,今天就跟大家聊聊哈~转载 2024-04-14 18:01:16 · 78 阅读 · 1 评论 -
java的volatile深入理解
Volatile多线程之间的可见性保证1、可见性实现:线程本身并不直接与主内存进行数据的交互,而是通过线程的工作内存(相当于CPU高级缓冲区,这么做的目的还是在于进一步缩小存储系统与CPU之间速度的差异,提高性能)来完成相应的操作。这也是导致线程间数据不可见的本质原因。因此要实现volatile变量的可见性,直接从这方面入手即可。对volatile变量的写操作与普通变量的主要区别有两点:(1)修改volatile变量时会强制将修改后的值立即刷新的主内存中。原创 2024-04-13 19:05:25 · 568 阅读 · 0 评论 -
java的ConcurrentHashMap深入理解
原数组长度为 n,所以我们有 n 个迁移任务,让每个线程每次负责一个小任务是最简单的,每做完一个任务再检测是否有其他没做完的任务,帮助迁移就可以了,而 Doug Lea 使用了一个 stride,简单理解就是步长,每个线程每次负责迁移其中的一部分,如每次迁移 16 个小任务。,然后向上取最近的 2 的 n 次方】。迁移时,利用了数组的大小时2的n次方,(n-1)与位全是1的特点,形成了高低链,将链中的元素成批的迁移到新数组中去,而不需要一个个计算hash,再到新数组中找位置。原创 2024-04-12 21:46:59 · 1020 阅读 · 0 评论 -
java的线程池深入理解
首先用RunnableFuture对任务封装-》执行ThreadPoolExecutor的executes方法-》判断当前执行线程是否小于核心线程数-》若小于则创建线程进行执行-》封装在实现了Runnable的worker中-》执行worker的run方法-》在run方法中调传进来的任务-》若是大于核心线程数则放入阻塞队列中去-》若核心线程都在跑并且阻塞队列也满了,判断是否大于最大线程数-》若小于最大线程数-》则创建临时线程进行跑-》若大于最大线程数,则用拒绝策略进行拒绝。那是在哪里做的操作呢?原创 2024-04-12 16:24:46 · 1892 阅读 · 0 评论 -
java线程interrupt
这样,被中断的线程可以在捕获异常后检查中断状态,并据此进行清理工作或退出循环。因此,如果线程在等待锁的过程中被中断,它将继续等待,直到它最终能够获取到锁。例如,一个监听用户输入的线程在接收到特定的中断信号时,可能会调用自身的。被中断的线程不会立即停止执行,而是会在检查中断状态后决定是否响应中断。方法本身不会清除中断状态,所以在唤醒后,如果需要的话,你可能需要手动清除中断状态,通过再次调用。调用响应中断,在Java中,线程的中断是一种协作机制,线程需要自行检查中断状态并响应。如果线程在等待锁的过程中被中断,原创 2024-04-11 12:44:04 · 988 阅读 · 0 评论 -
Java深入理解Synchronized二
锁对象,对象头里面的内容,使用不同的锁,就修改对象头中锁对应的位置信息锁在不同情况下,会升级。原创 2024-04-10 11:27:51 · 648 阅读 · 0 评论 -
java深入理解synchronized
消除锁是虚拟机另外一种锁的优化,这种优化更彻底,Java虚拟机在JIT编译时(可以简单理解为当某段代码即将第一次被执行时进行编译,又称即时编译),通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁,通过这种方式消除没有必要的锁,可以节省毫无意义的请求锁时间,如下StringBuffer的append是一个同步方法,但是在add方法中的StringBuffer属于一个局部变量,并且不会被其他线程所使用,因此StringBuffer不可能存在共享资源竞争的情景,JVM会自动将其锁消除。原创 2024-04-10 10:52:57 · 815 阅读 · 1 评论 -
java的Set
每加入一个元素,会调用该元素的equals和hashcode算法,和已有的元素进行比较,若是不同就加入,若是相同则不加入(首先是比较hashcode的值,然后是equals的方法)若是改变两个从compare方法的返回值,如全都改为返回1,就能够保证怎么存就怎么取,改为-1的话,就会逆序存储,返回0的话就只有一个元素了。* hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(减少equals的判断,从而提高效率).* 调用对象的compareTo()方法和集合中的对象比较。原创 2024-04-09 15:39:33 · 861 阅读 · 0 评论 -
java的list总结
可以用来存储数据,扩展了数组的功能, 数组和集合存储引用数据类型,存的都是地址值数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。原创 2024-04-09 10:42:44 · 568 阅读 · 1 评论