java
文章平均质量分 75
Randomom
java爱好者
展开
-
java并发总结
一、并发基础ㅤ1、进程与线程ㅤ进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)线程一个进程之内可以分为一到多个原创 2021-10-11 22:24:17 · 10648 阅读 · 1 评论 -
jvm疑难点总结
双亲委派机制为何可以防止核心API被篡改?因为每个类加载器都只会去加载指定目录下的包,即使自己定义了java.lang.String的类,加载该类时类加载器会委托父类加载器加载,最终到引导类加载器,引导类加载器只加载lib目录下面的类。ㅤ关于栈帧中的动态链接问题这里涉及到方法的调用方法的调用:在Jvm中,将符号引用转换位调用方法的直接引用,与方法的绑定机制相关。静态链接: 当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变。 将调用方法的原创 2021-10-10 17:14:08 · 109 阅读 · 0 评论 -
ReentrantLock&AQS源码分析
1、ReentrantLock的几个特点可中断可以设置超时时间可以设置为公平锁支持多个条件变量与 synchronized 一样,都支持可重入2、AQS原理AQS内部主要维护了一个双向队列和一个状态state在独占模式中,双向队列存储了所有阻塞的节点(当然也有被取消的节点)节点存储了当前线程,每个节点也有几个状态,其中1表示节点被取消-1表示该节点后面的节点需要被唤醒-2表示节点在条件变量中AQS中的state变量的几个状态0表示无锁1表示有锁大于1表示可重入锁原创 2021-07-11 18:45:31 · 107 阅读 · 0 评论 -
无锁&偏向锁&原子整型&轻量级锁在无锁竞争下的效率对比
文章目录1、无锁2、偏向锁3、原子整形4、synchronized轻量级锁5、总结1、无锁private final static int TEST_VALUE=999999999;public static void main(String[] args) { long l=0; long l1 = System.currentTimeMillis(); for(long i=0;i<TEST_VALUE;i++){ l++; }原创 2021-07-11 17:10:01 · 162 阅读 · 0 评论 -
java线程池源码详细分析(ThreadPoolExecutor)
前置工作一般我们使用的java线程池的大多都是由ThreadPoolExecutor所生成的。类结构图如下:在说源码前,先说明几个概念,这几个概念不弄明白,那源码也很难看懂。首先是线程池的状态和数量在线程池中是如何表示的ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量在线程池中使用了一个AtomicInteger类型的变量来保存线程池的状态和数量不妨看看源码是如何定义的:private final AtomicInteger ct原创 2021-04-28 18:14:34 · 459 阅读 · 0 评论