JAVA 基础
文章平均质量分 81
飞跃南墙的晓M
所有的付出只为让自己更好
展开
-
Java agent 配置不生效 (哭笑不得的坑)
用IDEA 添加参数时,需要先明确添加的是什么参数,不要见框就填!!!原创 2024-04-13 11:49:44 · 630 阅读 · 1 评论 -
抽象队列同步器(AQS)之 CountDownLatch 的原理
CountDownLatch 原理原创 2022-04-05 22:15:37 · 483 阅读 · 0 评论 -
【synchronized 原理】
描述了 synchronized 的原理以及锁升级的过程原创 2022-02-08 14:39:00 · 424 阅读 · 0 评论 -
AQS (AbstractQueuedSynchronizer)原理
AQS 原理AbstractQueuedSynchronizer 抽象同步队列简称 AQS,它是实现同步器的基础组件,类图如下:由上图可知,AQS 是一个 FIFO 的双向队列,其内部通过节点 head 和 tail 记录的队首和对尾元素,对列元素的类型为Node。其中Node的 thread 变量来存放进入AQS 队列里面的线程。Node 内部的 SHARED 用来标记该线程是获取共享资源时被阻塞挂起后放入AQS 队列中,EXCLUSIVE 是用来标记线程是获取独占资源时被挂起后放入AQS 队列的;原创 2020-12-09 08:39:39 · 277 阅读 · 0 评论 -
线程的异常捕捉
线程的异常捕捉场景代码演示之前总结过线程及线程池相关的文章,线程池创建也有多种方式,每种创建线程的方式又各有所异。这次总结子线程中异常的捕捉。场景在实际开发中,可能一些业务场景是需要开多条线程执行的,在执行过程中如果出现异常,是否能得到我们所期望的结果是和线程的执行方式有很大关系的。代码演示1.为做测试,此处自定义一个线程类:public class ThreadExceptionRunner implements Runnable { public void run() {原创 2020-06-12 16:29:20 · 504 阅读 · 0 评论 -
Java 中的锁分类以及锁的原理
锁的分类及基本概念乐观锁:假定没有冲突,在修改数据如果发现数据和之前获取的不一致,则读取最新的数据,再次尝试修改。悲观锁:假定会发生冲突,同步所有的数据的相关操作,从读数据就开始上锁。独占锁:给资源加上写锁,当前线程可以修改资源,其它线程不能再加锁(单写)共享锁:给资源加上读锁后只能读不能改,不能加写锁(多读)重入锁:同时加两次锁,不会出现死锁(再次拿到锁)可重入锁:同时加两次锁,会出现死锁(阻塞)公平锁:抢到锁的顺序和抢锁顺序相同则为公平锁非公平锁:抢到锁的顺序和抢锁顺序无关。synch原创 2020-05-18 22:56:58 · 1010 阅读 · 0 评论 -
线程安全之可见性(Volatile)和原子性(Atomic)
保证变量可见性的方式:final变量synchronized 关键字:synchronized 语义规范:1) 进入同步代码块前,先清空工作内存中的所有共享变量,从主内存中重新加载。2) 解锁前必须把修改的共享变量同步回主内存。**** 注意:如果线程竞争两把不同的锁则不能保证如何保证线程安全:1) 锁机制保护共享资源,只有获得锁的线程才可操作共享资源。2) Synchronized 语义规范保证了修改共享资源后,会同步主内存,就做到了线程安全。用volatile修饰1) 使用vol原创 2020-05-11 18:34:24 · 1130 阅读 · 0 评论 -
线程池原理及概念,如何确定线程池大小
线程池一、线程池的概念二、线程池原理三、线程池API1.接口定义和实现类2.方法定义3.任务执行过程4.Excutors 工具类四、如何确定线程数量一、线程池的概念线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件...原创 2020-05-07 23:25:47 · 2372 阅读 · 2 评论 -
JAVA 线程通信和线程封闭
目录线程通信:以去Bank 取钱为例wait/notifypark/unpark伪唤醒线程封闭ThreadLocal局部变量/ 栈封闭线程通信:以去Bank 取钱为例wait/notify只能由同一个对象锁的持有者线程调用,写在同步代码块里面。wait():使当前线程等待,加入该对象的等待集合中,并释放当前对象的锁。wait() 后面的代码是不执行的!notify/notifyAll: ...原创 2020-05-05 23:05:33 · 304 阅读 · 0 评论 -
CPU缓存与指令重排所存在的问题与解决办法
CPU性能优化手段—— 缓存多级缓存CPU一级缓存第一层高速缓存,分为数据缓存和指令缓存,大小在32~4096KBCPU二级缓存再次提高CPU的运算速度CPU三级缓存进一步降低内存延迟,提升大数据量计算时处理器的性能。多核共享一个L3缓存。CPU在读取时,查找的顺序L1->L2->L3->内存->外存储器。缓存同步协议(MESI协议修改态(Modifie...原创 2020-05-05 16:53:46 · 887 阅读 · 0 评论 -
线程的状态及线程的中止方式
线程状态此处以java.lang.Thread.State类中的6个状态分别说明,查看State类简介:A thread state. A thread can be in one of the following states:一个线程的状态,可以是以下状态之一:NEW : A thread that has not yet started is in this state.尚未启...原创 2020-05-05 16:22:25 · 281 阅读 · 0 评论 -
JVM执行原理你是否已经get
JVM 运行时的数据区.java 源代码通过编译成.class 字节码文件,将字节码文件运行在JVM中。接下来一起探讨JVM运行时都有哪些数据区域。先上一张结构图:线程共享线程共享:每个线程都能访问这块内存数据,随着虚拟机或者GC而创建和销毁。由图可知,线程共享分为:方法区和堆内存。方法区方法区:用来存储加载类信息,常量,静态变量,编译后的代码等数据。方法区存放着类的版本,字段,方...原创 2020-05-05 12:25:11 · 160 阅读 · 0 评论