![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 81
咸鱼谈何梦想
这个作者很懒,什么都没留下…
展开
-
Java中volatile关键字理解
1、Volatile定义一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1、保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2、禁止进行指令重排序。先看一段代码,假如线程1先执行,线程2后执行:// 线程1boolean stop = false;while(!stop){ doSomething();}// 线程2stop = true;这段代码是很典型的一段代码原创 2021-12-28 15:07:38 · 307 阅读 · 0 评论 -
TreeMap实现原理及源码浅析
一、简介TreeMap是一个线程不安全,有序的键值对集合,因为TreeMap实现了SotredMap接口。底层是一个红黑树的数据结构,每个key-value都作为一个红黑树的节点。如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序。这点会在接下来的代码中做说明,如果指定了比较器则按照比较器来进行排序。此外,TreeMap的Key是不能为null的,因为要实现排序。而Value是允许为null的。二、数据结构/*** TreeMap*/public class Tree原创 2020-08-16 10:18:32 · 559 阅读 · 0 评论 -
数据结构之树的基本概念学习
一、树的基本概念1、结点的度:一个结点拥有子树的个数称为度。比如A的度为3,C的度为2,H的度为0。度为0的结点称为叶子节点(D,F,G,H)。树的度是树中所有结点的度的最大值,此树的度为3。2、树中结点的最大层次成为树的深度或高度。此树的深度为4。3、父节点A的子结点B,C,D;B,C,D也是兄弟节点二、二叉树二叉树是每个节点最多拥有两个子节点的树。1、二叉树的遍历前序遍历(前根遍历):根——>左——>右,ABDEC中序遍历(中根遍历):左——>根——>右,DB原创 2020-08-15 22:11:10 · 404 阅读 · 0 评论 -
Java线程池流程及源码简析
一、为何要使用线程池// 创建并开启线程Thread t = new Thread(){ @Override public void run() { }};t.start();// 使用单线程线程池ExecutorService service = Executors.newSingleThreadExecutor();// 往线程池里添加任务service.execute(new Runnable() { @Override public voi原创 2020-08-04 09:44:15 · 110 阅读 · 0 评论 -
线程变量ThreadLocal的使用和分析
一、ThreadLocal的基本使用 // 创建一个ThreadLocal对象 final static ThreadLocal<String> mThreadLocal = new ThreadLocal<>(); @Test public void myThread() { new Thread() { @Override public void run() {原创 2020-08-03 10:59:08 · 172 阅读 · 0 评论 -
乐观锁CAS的简单理解
废话不不多说,先上代码:public class Test { private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 2; i++) { new Thread() { public void run() { for (int i = 0; i < 200; i++) { try { Thread.sleep(1原创 2020-08-03 10:57:12 · 354 阅读 · 0 评论 -
JVM模式和JMM模型
JVM模式和JMM模型1、Java虚拟机(JVM)模型结构如下(1)程序计数器(线程私有):每条线程都有一个独立的程序计数器,这类内存也称为“线程私有”的内存。记录当前线程执行字节码的位置,存储的是字节码指令地址,如果native方法,则为空。CPU同一时间只能执行一条线程中的指令,线程切换后通过程序计数器来恢复正确的执行位置。(2)虚拟机栈(线程私有):也是线程私有的。每个方法在执行的时候也会创建一个栈帧,存储了局部变量,操作数,动态链接,方法返回地址。每个方法从调用到执行完毕,对应一个栈帧在虚拟原创 2020-08-03 10:54:20 · 188 阅读 · 0 评论