2024年8月26日

Java 中的 ConcurrentHashMap

Java ConcurrentHashMap 类是并发集合类的一部分。它是一个哈希表实现,支持并发检索和更新。它用于多线程环境以避免ConcurrentModificationException。 并发哈希映射 如果我们尝试在迭代过程中修改集合,则会得到结果ConcurrentModificationException。Java 1.5 在包中引入了 Concurrent 类java.util.concurrent来克服这种情况。ConcurrentHashMap 是 Map 实现,它允许我们在迭代过程中修改 Map。ConcurrentHashMap 操作是线程安全的。ConcurrentHashMap 不允许键和值为 null。 Java ConcurrentHashMap 示例 该类与HashMapConcurrentHashMap类似,不同…
2024年8月26日

如何从另一个 Java 程序编译和运行 Java 程序

您是否想过是否可以从另一个 Java 程序编译并运行一个 Java 程序?我们可以用Runtime.exec(String cmd)它来向底层操作系统发出命令。我们将使用相同的方法从另一个 Java 程序编译并运行一个 Java 程序。 从另一个 Java 程序编译并运行 Java 程序 让我们编写一个简单的 java 程序,它将从另一个 java 程序编译并运行。 package com.journaldev.files; public class Test { public static void main(String[] args) { System.out.println("Start"); for(String str : args){ System.out.println(str); } } } 这是我正在编译和运行测试类的另一个程序。 package com.journaldev…
2024年8月26日

[已修复] 可执行文件中的 CPU 类型错误 - 在 MacBook 上安装 Java

我最近买了新的 MacBook Air M1,首先想安装的是 Java。因此,我下载了 OpenJDK tar 文件,将其解压缩并尝试运行“java -version”命令,结果出现了错误: -bash: ./java: 可执行文件中的 CPU 类型错误 这对我来说是新鲜事,我使用 Java 和 Mac OS 已经很久了,从来没有见过这种错误。经过一些在线搜索和调试,我发现发生这种情况是因为新的 MacBook M1 芯片使用的是 ARM64 架构,而从 JDK 站点下载的 OpenJDK 二进制文件是为 x64 架构构建的,而英特尔处理器使用的是 x64 架构。 修复-bash:./java:可执行文件中的 CPU 类型错误 确定问题后,解决方案很简单。我所需要的只是找到一个支持 ARM64 架构的 OpenJDK 实现。经过一番搜索,我找到了Azul Zulu OpenJDK 构建页面,它有…
2024年8月26日

Java 中的 AtomicInteger

今天我们将研究AtomicIntegerJava。原子操作在单个任务单元中执行,不受其他操作的干扰。原子操作在多线程环境中是必需的,可以避免数据不一致。 原子整数 让我们创建一个简单的多线程程序,其中每个线程都会将共享count变量增加 4 次。因此,如果有两个线程,则它们完成后count值应该是 8。JavaAtomic.java package com.journaldev.concurrency; public class JavaAtomic { public static void main(String[] args) throws InterruptedException { ProcessingThread pt = new ProcessingThread(); Thread t1 = new Thread(pt, "t1"); t1.start(); T…
2024年8月26日

Java 中的模板方法设计模式

模板方法是一种行为设计模式。模板方法设计模式用于创建方法存根并将某些实现步骤推迟到子类。 模板方法设计模式 模板方法定义了执行算法的步骤,它可以提供所有或部分子类通用的默认实现。让我们通过一个例子来理解这种模式,假设我们想提供一种建造房屋的算法。建造房屋需要执行的步骤是 - 打地基、建柱子、建墙壁和窗户。重要的一点是我们不能改变执行的顺序,因为我们不能在打地基之前建窗户。所以在这种情况下我们可以创建一个模板方法,使用不同的方法来建造房屋。现在,建造房屋地基的方法对于所有类型的房屋都是一样的,无论是木屋还是玻璃屋。所以我们可以为此提供基本实现,如果子类想要重写这个方法,他们可以,但大多数情况下它对所有类型的房屋都是通用的。为了确保子类不会重写模板方法,我们应该将其设为 final。 模板方法抽象类 由于我们希望某些方法由子类实…
2024年8月26日

为什么 Java 中的字符串是不可变的?

为什么 String 在 Java 中是不可变的,这是常见的面试问题之一。字符串是任何编程语言中最常用的类之一。我们知道 String 在 Java 中是不可变的和最终的。Java 运行时维护一个String 池,使其成为一个特殊的类。 为什么 Java 中的 String 是不可变的? 让我们看看字符串不变性的一些好处,这将有助于理解为什么字符串在 Java 中是不可变的。 字符串池之所以可行,是因为 String 在 Java 中是不可变的。这样,Java 运行时可以节省大量堆空间,因为不同的 String 变量可以引用池中的同一个 String 变量。如果 String 不是不可变的,那么 String 驻留就不可能实现,因为如果任何变量改变了值,它也会反映在其他变量中。 如果字符串不是不可变的,那么它将对应用程序造成严重的安全威胁。例如,数据库用户名、密码作为字符串传…
2024年8月26日

使用 Eclipse 的 Java 示例中的 SOAP Web 服务

Java 中的 Soap Webservices 可以通过多种方式开发。我们在上一篇教程中学习了JAX-WS SOAP Web 服务,今天我们将学习如何使用 Eclipse 创建 SOAP Web 服务及其客户端程序。在这里我们将不使用 JAX-WS,我们将使用集成在 Eclipse 中的Apache Axis,并提供快速简便的方法将应用程序转换为 Java Web 服务,并使用测试 JSP 页面创建客户端存根以用于测试目的。 Java 中的 SOAP Web 服务 我在本教程中使用Eclipse Mars Release (4.5.0),但我认为这些步骤也适用于旧版本的 eclipse。另外,请确保已在 Eclipse 中添加 Apache Tomcat 或任何其他 servlet 容器作为服务器。现在让我们开始实现Eclipse Web 服务。 SOAP Web 服务示例 让我们开始使用 Ecl…
2024年8月26日

Java 中的关系运算符

Java 中的关系运算符用于比较两个变量是否相等、不等、大于、小于等。Java 关系运算符总是返回布尔值 - true 或 false。 Java 中的关系运算符 Java 有 6 个关系运算符。 == 是相等运算符。如果两个操作数都指向同一个对象,则返回 true,否则返回 false。 != 为非相等运算符。如果两个操作数引用不同的对象,则返回 true,否则返回 false。 < 是小于运算符。 > 是大于运算符。 <= 小于或等于运算符。 >= 大于或等于运算符。 关系运算符支持的数据类型 == 和 != 运算符可以与任何原始数据类型以及对象一起使用。 <、>、<= 和 >= 可用于以数字表示的原始数据类型。它适用于 char、byte、short、int 等,但不适用于 boolean。对象不支持这些运算符。 关系运算符示例 packa…
2024年8月26日

SVG 中的矩形:

在 svg 中定义矩形: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 200"> <rect x="349" y="67" width="302" height="66" rx="5" ry="5" stroke="#E4AF4C" fill="#F4D37D" stroke-width="2" /> 分解 以下是用于定义矩形的属性。如果省略 rx 和 ry,则角半径将默认为 0: x & y:矩形左上角的 x 和 y 位置。 宽度和高度:矩形的宽度和高度。 rx 和 ry:角半径。…
2024年8月26日

SVG 中的径向渐变

我已经讲过如何在 SVG 中定义线性渐变,所以让我们再讲一些径向渐变的例子。语法与线性渐变非常相似。 再次,这是我们的基本交叉骨头 SVG 图像: 这是它的 SVG 标记,通过将路径数据更改为... 来简化: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"> <style>.bones{fill:#ccc ;} .eye{fill:#666;}</style> <path class="bones" d="..."/> <path class="bones" d="..."/> <g> <path class="eye" d="..."/> <path class="eye" d="..."/> <…