- JDK 6 时提供。 一种同步器,可以由一个线程独占。该类提供了创建锁和相关同步器的基础,这些同步器可能包含所有权的概念。AbstractOwnableSynchronizer类本身并不管理或使用这些信息。但是,子类和工具可以使用适当维护的值来帮助控制和监视访问并提供诊断。 public abstract class AbstractOwnableSynchroniz... JDK 6 时提供。 一种同步器,可以由一个线程独占。该类提供了创建锁和相关同步器的基础,这些同步器可能包含所有权的概念。AbstractOwnableSynchronizer类本身并不管理或使用这些信息。但是,子类和工具可以使用适当维护的值来帮助控制和监视访问并提供诊断。 public abstract class AbstractOwnableSynchroniz...
- 有时想编写只有静态方法和静态字段的类。这种类很不好,因为有些人滥用在OOP 语言编写面向过程的程序,但确有用途。 可用 java.lang.Math 或 java.util.Arrays 这种类,把基本类型的值或数组类型的方法组织起来。 还可以用于对以 java.util.Collections 的方式,把实现特定接口的对象上的静态方法组织起来。( Java 8,可以将... 有时想编写只有静态方法和静态字段的类。这种类很不好,因为有些人滥用在OOP 语言编写面向过程的程序,但确有用途。 可用 java.lang.Math 或 java.util.Arrays 这种类,把基本类型的值或数组类型的方法组织起来。 还可以用于对以 java.util.Collections 的方式,把实现特定接口的对象上的静态方法组织起来。( Java 8,可以将...
- package java.lang; /** * The {@code Void} class is an uninstantiable placeholder class to hold a * reference to the {@code Class} object representing the Java keyword * void. * * @... package java.lang; /** * The {@code Void} class is an uninstantiable placeholder class to hold a * reference to the {@code Class} object representing the Java keyword * void. * * @...
- 下载了最新的JUnit版本,是4.13,结果尝试使用发现总是报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing这样的错误, 一般的解决方案是,换一个低一点的版本就好了还有人说,是缺少hamcrest的包。去官网又看了一下,结果发现这样一段话: junit.jar: Includes the Ham... 下载了最新的JUnit版本,是4.13,结果尝试使用发现总是报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing这样的错误, 一般的解决方案是,换一个低一点的版本就好了还有人说,是缺少hamcrest的包。去官网又看了一下,结果发现这样一段话: junit.jar: Includes the Ham...
- 要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。 涉及到线程之间相互通信,分为下面四类: 1 文件共享 2 网络共享 socket编程问题,非本文重点,不再赘述 3 共享变量 4 线程协作 - JDK API 细分为: suspend/resume 、 wait/notify、 park/unpark JDK中对于需要... 要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。 涉及到线程之间相互通信,分为下面四类: 1 文件共享 2 网络共享 socket编程问题,非本文重点,不再赘述 3 共享变量 4 线程协作 - JDK API 细分为: suspend/resume 、 wait/notify、 park/unpark JDK中对于需要...
- 文章目录 术语并发的新定义并发的超能力为速度而生的并发 普通的编程:首先发生一件事,然后是下一件事。我们完全控制所有步骤及其发生的顺序。 如果我们将值设置为5,那么稍后会回来并发现它是47,这将是非常令人惊讶的。这就是并的发世界,你往常信赖的一切都不再可靠。你必须知道和了解这些情况发生条件。 构建并发应用程序非常类似于游戏Jenga,每当你拉出一个块并将... 文章目录 术语并发的新定义并发的超能力为速度而生的并发 普通的编程:首先发生一件事,然后是下一件事。我们完全控制所有步骤及其发生的顺序。 如果我们将值设置为5,那么稍后会回来并发现它是47,这将是非常令人惊讶的。这就是并的发世界,你往常信赖的一切都不再可靠。你必须知道和了解这些情况发生条件。 构建并发应用程序非常类似于游戏Jenga,每当你拉出一个块并将...
- 0 相关源码 1 竞态条件与临界区 多个线程访问了相同的资源,向这些资源做了写操作时,对执行顺序有要求。 1.1 临界区 incr 方法内部就是临界区域,关键部分代码的多线程并发执行,会对执行结果产生影响。 1.2 竞态条件 可能发生在临界区域内的特殊条件。多线程执行incr方法中的i++关键代码时,产生了竞态条件 2 共享资源 如果一段代码是线程安全的... 0 相关源码 1 竞态条件与临界区 多个线程访问了相同的资源,向这些资源做了写操作时,对执行顺序有要求。 1.1 临界区 incr 方法内部就是临界区域,关键部分代码的多线程并发执行,会对执行结果产生影响。 1.2 竞态条件 可能发生在临界区域内的特殊条件。多线程执行incr方法中的i++关键代码时,产生了竞态条件 2 共享资源 如果一段代码是线程安全的...
- 1 案例 熟悉的 DCL 单例实现 测试类 可见对Singleton的序列化、反序列化得到的对象是一个新的对象,说明破坏了Singleton的单例性。 2 序列化破坏单例的源码分析 看关键代码readOrdinaryObject 该处创建的obj就是本方法要返回的对象 isInstantiable:若一个serializable/external... 1 案例 熟悉的 DCL 单例实现 测试类 可见对Singleton的序列化、反序列化得到的对象是一个新的对象,说明破坏了Singleton的单例性。 2 序列化破坏单例的源码分析 看关键代码readOrdinaryObject 该处创建的obj就是本方法要返回的对象 isInstantiable:若一个serializable/external...
- 最近在学习Java多线程设计的时候,在网上看到一个面试题目的讨论,虽然楼主所说有些道理,但感觉还是有些问题,故此在和同事讨论以后还是有了若干收获,在此略作总结。 首先,来看看这个面试题目吧。 public class MyStack { private List<String> list = new ArrayList<String>(); ... 最近在学习Java多线程设计的时候,在网上看到一个面试题目的讨论,虽然楼主所说有些道理,但感觉还是有些问题,故此在和同事讨论以后还是有了若干收获,在此略作总结。 首先,来看看这个面试题目吧。 public class MyStack { private List<String> list = new ArrayList<String>(); ...
- 1 概述 JVM : Java Virtual Machine ,也就是Java虚拟机。 虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境。 2 JVM核心架构设计 核心功能 通过ClassLoader 寻找和装载class文件解释字节码成为指令并执行... 1 概述 JVM : Java Virtual Machine ,也就是Java虚拟机。 虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境。 2 JVM核心架构设计 核心功能 通过ClassLoader 寻找和装载class文件解释字节码成为指令并执行...
- 栈Stack 堆栈是“后进先出”(LIFO)集合。它有时被称为叠加栈(pushdown stack),因为最后“压入”(push)栈的元素,第一个被“弹出”(pop)栈。经常用来类比栈的事物是带有弹簧支架的自助餐厅托盘。最后装入的托盘总是最先拿出来使用的。 Java 1.0 中附带了一个 Stack 类,结果设计得很糟糕(为了向后兼容,永远坚持 Java ... 栈Stack 堆栈是“后进先出”(LIFO)集合。它有时被称为叠加栈(pushdown stack),因为最后“压入”(push)栈的元素,第一个被“弹出”(pop)栈。经常用来类比栈的事物是带有弹簧支架的自助餐厅托盘。最后装入的托盘总是最先拿出来使用的。 Java 1.0 中附带了一个 Stack 类,结果设计得很糟糕(为了向后兼容,永远坚持 Java ...
- 1 当反射遇到方法重载 重载grade方法,入参分别是int和Integer。 不通过反射,选用哪个重载方法很清晰,比如传入666走int参数重载方法,传入Integer.valueOf(“666”)走Integer重载。 但你若墨守成规认为反射调用方法也是根据入参类型确定方法重载。 使用getDeclaredMethod获取 grade方法,然后传入Intege... 1 当反射遇到方法重载 重载grade方法,入参分别是int和Integer。 不通过反射,选用哪个重载方法很清晰,比如传入666走int参数重载方法,传入Integer.valueOf(“666”)走Integer重载。 但你若墨守成规认为反射调用方法也是根据入参类型确定方法重载。 使用getDeclaredMethod获取 grade方法,然后传入Intege...
- 0 Edit 与Command模式中的Command类似的一个概念。Command模式将操作的执行逻辑封装到一个个Command对象中,解耦了操作发起者和操作执行逻辑之间的耦合关系:操作发起者要进行一个操作,不用关心具体的执行逻辑,只需创建一个相应的Command实例,调用它的执行接口即可。 而在swing中,与界面交互的各种操作,比如插入,删除等被称之为Edit,实... 0 Edit 与Command模式中的Command类似的一个概念。Command模式将操作的执行逻辑封装到一个个Command对象中,解耦了操作发起者和操作执行逻辑之间的耦合关系:操作发起者要进行一个操作,不用关心具体的执行逻辑,只需创建一个相应的Command实例,调用它的执行接口即可。 而在swing中,与界面交互的各种操作,比如插入,删除等被称之为Edit,实...
- 0 前言 全是干货的技术殿堂 文章收录在我的 GitHub 仓库,欢迎Star/fork: Java-Interview-Tutorial https://github.com/Wasabi1234/Java-Interview-Tutorial 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可... 0 前言 全是干货的技术殿堂 文章收录在我的 GitHub 仓库,欢迎Star/fork: Java-Interview-Tutorial https://github.com/Wasabi1234/Java-Interview-Tutorial 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可...
- 接口只是定义了一个标准,很多类可以实现这个接口: List list = new ArrayList(); // 实例化的是ArrayList这个类 List list = new Vector(); // 实例化的是Vector这个类 12 其中:ArrayList 和 Vector 这两个类都实现了List接口 A instanceof B 的作用: 1、 对... 接口只是定义了一个标准,很多类可以实现这个接口: List list = new ArrayList(); // 实例化的是ArrayList这个类 List list = new Vector(); // 实例化的是Vector这个类 12 其中:ArrayList 和 Vector 这两个类都实现了List接口 A instanceof B 的作用: 1、 对...
上滑加载中
推荐直播
-
AI编码实干派,“码”力全开2026/02/26 周四 15:00-16:30
谈宗玮/于邦旭/丁俊卿/陈云亮/王一男
【中国,深圳,2026年2月26日】,以“AI编码实干派,码力全开”为主题的华为云码道(CodeArts)代码智能体新春发布会在线上成功召开。华为云码道公测版正式发布,为开发者和企业提供具备工程化能力的智能编码解决方案。
回顾中 -
华为云码道-玩转OpenClaw,在线养虾2026/03/11 周三 19:00-21:00
刘昱,华为云高级工程师/谈心,华为云技术专家/李海仑,上海圭卓智能科技有限公司CEO
OpenClaw 火爆开发者圈,华为云码道最新推出 Skill ——开发者只需输入一句口令,即可部署一个功能完整的「小龙虾」智能体。直播带你玩转华为云码道,玩转OpenClaw
回顾中 -
华为云码道-AI时代应用开发利器2026/03/18 周三 19:00-20:00
童得力,华为云开发者生态运营总监/姚圣伟,华为云HCDE开发者专家
本次直播由华为专家带你实战应用开发,看华为云码道(CodeArts)代码智能体如何在AI时代让你的创意应用快速落地。更有华为云HCDE开发者专家带你用码道玩转JiuwenClaw,让小艺成为你的AI助理。
回顾中
热门标签