- 上一篇我们介绍了ArrayList的相关源码,这篇我们将了解一下fail-fast机制的相关知识 fail-fast的简介fail-fast的相关示例fail-fast的解决办法 fail-fast的原理解决fail-fast的原理 fail-fast的简介 fail-fast机制是java 集合的一种错误机制。 当多个线程对同一个集合的内容进行操作时,就会产生fai... 上一篇我们介绍了ArrayList的相关源码,这篇我们将了解一下fail-fast机制的相关知识 fail-fast的简介fail-fast的相关示例fail-fast的解决办法 fail-fast的原理解决fail-fast的原理 fail-fast的简介 fail-fast机制是java 集合的一种错误机制。 当多个线程对同一个集合的内容进行操作时,就会产生fai...
- 摘要 并发编程世界里,由于CPU缓存导致的可见性问题,线程切换导致的原子性问题,以及编译器重排序导致的有序性问题是并发编程Bug的根源。 正文 可见性 一个线程对共享变量的修改。另外一个线程能够立刻看到,我们称之为可见性。共享变量指的是存放在堆内存,由所有线程所共享的变量。比如:实例变量,静态变量。 如图所示: 共享变量V可以由线程A和线程B同时操作,线程A和... 摘要 并发编程世界里,由于CPU缓存导致的可见性问题,线程切换导致的原子性问题,以及编译器重排序导致的有序性问题是并发编程Bug的根源。 正文 可见性 一个线程对共享变量的修改。另外一个线程能够立刻看到,我们称之为可见性。共享变量指的是存放在堆内存,由所有线程所共享的变量。比如:实例变量,静态变量。 如图所示: 共享变量V可以由线程A和线程B同时操作,线程A和...
- 这一章,我们对HashMap进行学习。 HashMap介绍 HashMap是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap继承于AbstractMap,实现了Map,Cloneable,java.io.Serializable接口 HashMap的实现不是同步的,这意味着它是线程不安全的。它的key、value都可以为null,此外... 这一章,我们对HashMap进行学习。 HashMap介绍 HashMap是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap继承于AbstractMap,实现了Map,Cloneable,java.io.Serializable接口 HashMap的实现不是同步的,这意味着它是线程不安全的。它的key、value都可以为null,此外...
- 泛型程序设计 简要介绍 类型变量使用大写形式,且比较短,在Java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值得类型。Object 表示”任意类型”程序清单使用了Pair类,静态的minmax方法遍历了数组并同时计算出最大值和最小值。它用一个Pair对象返回了两个结果。compareTo 方法只有 Comparable 接口有该方法,所以我们要将... 泛型程序设计 简要介绍 类型变量使用大写形式,且比较短,在Java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值得类型。Object 表示”任意类型”程序清单使用了Pair类,静态的minmax方法遍历了数组并同时计算出最大值和最小值。它用一个Pair对象返回了两个结果。compareTo 方法只有 Comparable 接口有该方法,所以我们要将...
- 文章目录 前言类加载的过程类加载器何为双亲委派模型ClassLoader类的loadClass方法 双亲委派模型存在的问题解决办法以JDBC驱动管理为例 加载资源SpringFactoriesLoader详解 总结 前言 前面我们介绍了JavaConfig和常用的Annotation,这一篇文章我们来聊聊SpringFactoriesLoader,在... 文章目录 前言类加载的过程类加载器何为双亲委派模型ClassLoader类的loadClass方法 双亲委派模型存在的问题解决办法以JDBC驱动管理为例 加载资源SpringFactoriesLoader详解 总结 前言 前面我们介绍了JavaConfig和常用的Annotation,这一篇文章我们来聊聊SpringFactoriesLoader,在...
- 文章目录 前言对象创建1.类加载检查2.分配内存分配内存的方式内存分配的并发问题3.初始化零值4.设置对象头:5. 执行init方法; 对象内存布局对象头实例数据对齐填充 对象访问方式使用句柄访问使用直接指针访问下面举例说明: 总结参考 前言 上一篇我们介绍了JVM的内存区域布局,并且重点介绍了堆和栈的概念。,今天我们接着来学习JVM的对象创建过程... 文章目录 前言对象创建1.类加载检查2.分配内存分配内存的方式内存分配的并发问题3.初始化零值4.设置对象头:5. 执行init方法; 对象内存布局对象头实例数据对齐填充 对象访问方式使用句柄访问使用直接指针访问下面举例说明: 总结参考 前言 上一篇我们介绍了JVM的内存区域布局,并且重点介绍了堆和栈的概念。,今天我们接着来学习JVM的对象创建过程...
- 内部类的简介 内部类是定义在另一个类中的类。 内部类的使用场景 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。内部类可以对同一个包中的其他类隐藏起来。当想要定义一个回调函数且不想大量编写代码是时,使用匿名内部类比较便捷 下面我们看一个简单程序 package com.jay.innerClass; import javax.swing.*; ... 内部类的简介 内部类是定义在另一个类中的类。 内部类的使用场景 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。内部类可以对同一个包中的其他类隐藏起来。当想要定义一个回调函数且不想大量编写代码是时,使用匿名内部类比较便捷 下面我们看一个简单程序 package com.jay.innerClass; import javax.swing.*; ...
- 概述 今天接着学习设计模式,今天要学习的模式是代理模式。代理模式的应用场景有很多,例如:生活中的代购,明星的经纪人。 定义与结构 代理模式(Proxy)是一种设计模式,为其他对象提供一种代理以控制对这个对象的访问。 在软件开发中有个原则:就是开-闭原则,对新增开放,对修改关闭。尽量不要去修改已经写好的代码。如果需要可以增加一个代理类,来扩展目标代码。 实例 假... 概述 今天接着学习设计模式,今天要学习的模式是代理模式。代理模式的应用场景有很多,例如:生活中的代购,明星的经纪人。 定义与结构 代理模式(Proxy)是一种设计模式,为其他对象提供一种代理以控制对这个对象的访问。 在软件开发中有个原则:就是开-闭原则,对新增开放,对修改关闭。尽量不要去修改已经写好的代码。如果需要可以增加一个代理类,来扩展目标代码。 实例 假...
- 这一篇我们来学习一下JVM中的类加载过程。说到类的加载过程,我们需要先了解一下JVM中类的生命周期。在JVM中类的生命周期有七个阶段。分别是: 加载(Loading):加载是通过类加载器从不同的地方加载进二进制字节流,类加载器可以参考类加载器与双亲委派模型验证(Verification):验证阶段是为了确保Class文件的字节流中包含的信息是否符合《JVM虚拟机规范》... 这一篇我们来学习一下JVM中的类加载过程。说到类的加载过程,我们需要先了解一下JVM中类的生命周期。在JVM中类的生命周期有七个阶段。分别是: 加载(Loading):加载是通过类加载器从不同的地方加载进二进制字节流,类加载器可以参考类加载器与双亲委派模型验证(Verification):验证阶段是为了确保Class文件的字节流中包含的信息是否符合《JVM虚拟机规范》...
- Java异常机制学习&分析 处理错误 Java异常层次简要类图 何时声明受查异常 调用一个抛出受查异常的方法,例如, FileInputStream构造器程序运行过程中发现错误,并且利用throw语句抛出一个受查异常程序出现错误,例如,a[-1]=0会抛出一个ArrayIndexOutOfBoundsException这样的非受查异常。Java 虚拟机和... Java异常机制学习&分析 处理错误 Java异常层次简要类图 何时声明受查异常 调用一个抛出受查异常的方法,例如, FileInputStream构造器程序运行过程中发现错误,并且利用throw语句抛出一个受查异常程序出现错误,例如,a[-1]=0会抛出一个ArrayIndexOutOfBoundsException这样的非受查异常。Java 虚拟机和...
- ConcurrentLinkedQueue的定义 ConcurrentLinkedQueue是 非阻塞的单端队列,其是一个通过链表实现的并发安全的队列。是java中并发环境下性能最好的队列,它是使用非阻塞算法(CAS)来实现线程安全的。它采用先进先出的规则对节点进行排序,当我们添加一个元素时,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。 Co... ConcurrentLinkedQueue的定义 ConcurrentLinkedQueue是 非阻塞的单端队列,其是一个通过链表实现的并发安全的队列。是java中并发环境下性能最好的队列,它是使用非阻塞算法(CAS)来实现线程安全的。它采用先进先出的规则对节点进行排序,当我们添加一个元素时,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。 Co...
- 继承 this关键字的用途 引用隐式参数;调用该类其他的构造器。 super关键字的用途 调用超类的方法。调用超类的构造器。 多态 可以通过 is-a规则,它表明子类的每个对象也是超类的对象。例如,每个 经理都是雇员。因此,将Manager类设计为Employee类的子类是显而易见的,反之不然,并不是每一名雇员都是经理。 is-a 规则的另一种表述法是置... 继承 this关键字的用途 引用隐式参数;调用该类其他的构造器。 super关键字的用途 调用超类的方法。调用超类的构造器。 多态 可以通过 is-a规则,它表明子类的每个对象也是超类的对象。例如,每个 经理都是雇员。因此,将Manager类设计为Employee类的子类是显而易见的,反之不然,并不是每一名雇员都是经理。 is-a 规则的另一种表述法是置...
- 调试技巧 可以用下面的方法打印或记录任意变量的值 System.out.print("x="+x) 或者 Logger.getGlobal().info("x="+x)为每个类添加 main 方法,后期要删除单元测试日志代理是一个子类对象,他可以截获方法调用,并进行日志记录,然后调用超类中的方法,例如: 如果在调用Random类的nextDouble方法时出现... 调试技巧 可以用下面的方法打印或记录任意变量的值 System.out.print("x="+x) 或者 Logger.getGlobal().info("x="+x)为每个类添加 main 方法,后期要删除单元测试日志代理是一个子类对象,他可以截获方法调用,并进行日志记录,然后调用超类中的方法,例如: 如果在调用Random类的nextDouble方法时出现...
- 步骤一、下载安装包 a. 因为Java JDK区分32位和64位,所以安装之前需先判断一下我们操作系统为多少位·,命令如下: uname -a 解释:如果有x86_64就是64位的,没有就是32位的。后面是x686或x86_64则内核是64位的,i686或i386则内核是32位的。  ... 步骤一、下载安装包 a. 因为Java JDK区分32位和64位,所以安装之前需先判断一下我们操作系统为多少位·,命令如下: uname -a 解释:如果有x86_64就是64位的,没有就是32位的。后面是x686或x86_64则内核是64位的,i686或i386则内核是32位的。  ...
- 前言 上一篇我们介绍了在并发编程里面导致bug的三种问题,可见性问题,原子性问题,有序性问题。针对这三个问题,Java语言提供了Java内存模型(JMM)来解决这三种问题,主要是针对有序性和可见性问题。其本质上就是按需禁用缓存和编译优化。接下来我们就详细的阐述下。 Java内存模型介绍 Java 内存模型是一个很复杂的规范,本质上可以理解为:Java内存模型规范了... 前言 上一篇我们介绍了在并发编程里面导致bug的三种问题,可见性问题,原子性问题,有序性问题。针对这三个问题,Java语言提供了Java内存模型(JMM)来解决这三种问题,主要是针对有序性和可见性问题。其本质上就是按需禁用缓存和编译优化。接下来我们就详细的阐述下。 Java内存模型介绍 Java 内存模型是一个很复杂的规范,本质上可以理解为:Java内存模型规范了...
上滑加载中
推荐直播
-
昇腾AI算法挑战赛-核心算子如何优化?专家带你深度解析2025/11/17 周一 16:00-17:00
王老师 华为算子专家
昇腾AI算法挑战赛进阶赛战鼓催征!本期直播间,我们特邀华为算子专家王老师,为你深度剖析Matmul、wholereducesum等核心算子的底层原理与优化技巧,直击赛题核心。想提升代码效率、冲击更高排名?锁定直播,带你破局!
回顾中 -
AI编码实干派,“码”力全开2026/02/26 周四 15:00-16:30
谈宗玮/于邦旭/丁俊卿/陈云亮/王一男
【中国,深圳,2026年2月26日】,以“AI编码实干派,码力全开”为主题的华为云码道(CodeArts)代码智能体新春发布会在线上成功召开。华为云码道公测版正式发布,为开发者和企业提供具备工程化能力的智能编码解决方案。
回顾中 -
华为云码道-玩转OpenClaw,开启在线养虾模式2026/03/11 周三 19:00-20:00
刘昱,华为云高级工程师/谈心,华为云技术专家/李海仑,上海圭卓智能科技有限公司CEO
OpenClaw 火爆开发者圈,华为云码道最新推出 Skill ——开发者只需输入一句口令,即可部署一个功能完整的「小龙虾」智能体。直播带你玩转华为云码道,玩转OpenClaw
回顾中
热门标签