标签: Java
编程

Java 中的 CountDownLatch 指南

2032 2024-06-26 10:25:00

本文中,我们将提供 CountDownLatch 类的指南,并演示如何在几个实际示例中使用它。本质上,通过使用 CountDownLatch,我们可以让线程阻塞,直到其他线程完成给定的任务。简单地说,CountDownLatch 有一个计数器(counter)字段,你可以根据需要递减。然后我们可以使用它来阻塞调用线程,直到它被...

详情...
编程

Java 中的 Semaphore

1526 2024-06-25 12:37:00

本文中,我们将探讨 Java 中信号量(semphore)和 mutex 的基础。我们将从 java.util.concurrent.Semaphore 开始。我们可以使用信号量(semaphore)来限制访问特定资源的并发线程的数量。在以下示例中,我们将实现一个简单的登录队列来限制系统中的用户数量:class LoginQu...

详情...
编程

如何使用 Hibernate 实现软删除

1634 2024-06-19 02:50:00

某些应用中,你不希望或不允许从数据库中永久删除记录。但仍然需要删除或隐藏不再活动的记录。一个例子可能是想要保留的用户帐户,因为它链接到仍在使用的其他业务对象。你有两个基本选项可以将这些信息保存在系统中。你可以保留记录所有更改的审核日志,也可以执行隐藏已删除记录的软删除。我在关于Hibernate Envers 的文章中解释了审计日志选项。今天,我想展示如何使...

详情...
编程

Lombok & Hibernate: 如何避免常见的陷阱

1550 2024-06-18 19:46:00

Lombok 是 Java 开发人员中流行的框架,因为它生成重复的样板代码,如 getter 和 setter 方法、equals 和 hashCode 方法以及默认构造函数。你所需要做的就是向类中添加一些注释,Lombok 将在编译时添加所需的代码。这对于普通类来说效果相当好,但如果将其用于 Hibernate 实体,则会引入一些危险的陷阱。为了避免这些陷...

详情...
编程

Lombok 项目介绍

1451 2024-06-15 17:29:00

Java 是一种很棒的语言,但对于我们在代码中必须执行的常见任务或遵守某些框架实践来说,它有时会变得过于冗长。这通常不会给我们项目的商业方面带来任何真正的价值,而这正是 Lombok 让我们更有效率的地方。它的工作方式是嵌入到我们的编译过程,并根据我们在代码中引入的诸多项目注释,将 Java 字节码自动生成到 .class 文件中。将它引入...

详情...
编程

Java 哈希密码

1501 2024-06-06 00:37:00

本教程中,我们将讨论密码哈希的重要性。我们将快速了解它是什么,为什么它很重要,以及在 Java 中实现它的一些安全和不安全的方法。哈希(Hash)是使用称为加密哈希函数的数学函数从给定消息生成字符串或哈希的过程。虽然有几种哈希函数,但那些为哈希密码量身定制的函数需要具有四个主要属性才能安全:...

详情...
编程

Java ConcurrentMap 指南

1892 2024-06-05 04:12:00

Map 天然是 Java 集合中最广泛的样式之一。而且,重要的是,HashMap 不是线程安全的实现,而 Hashtable 确实通过同步操作提供了线程安全。尽管 Hashtable 是线程安全的,但它的效率不是很高。另一个完全同步的 Map(Collections.synchronizedMap)也没有表现出很高的效率。如果我们想要在高并发下具有...

详情...
编程

Java HashMap 指南

1458 2024-06-04 03:17:00

本文中,我们将了解如何在 Java 中使用 HashMap,以及它在内部的工作方式。Hashtable 是一个与 HashMap 非常相似的类。要了解 Hashtable 类本身以及 HashMap 和 Hashtable 之间的区别,看参照此文。我们先来看看 HashMap 是一个映射指的着什么。映射是键值对映射,这意味着每个键都映...

详情...
编程

使用 Spring Boot 和 JPA 存储 PostgreSQL JSONB

2422 2024-06-02 01:26:00

本教程将使我们全面了解在 PostgreSQL JSONB 列中存储 JSON 数据。我们将快速回顾如何使用 JPA 处理存储在可变字符(VARCHAR)数据库列中的 JSON 值。之后,我们将比较 VARCHAR 类型和 JSONB 类型之间的差异,了解 JSONB 的附加功能。最后,我们将讨论 JPA 中的映射 JSONB 类型...

详情...
编程

使用 Spring 实现两级缓存

1355 2024-05-31 00:55:00

缓存数据意味着我们的应用不必访问速度较慢的存储层,从而提高了性能和响应能力。我们可以使用任何内存中的实现库来实现缓存,比如 Caffeine。尽管这样做可以提高数据检索的性能,但如果应用部署到多个副本集,则缓存不会在实例之间共享。为了克服这个问题,我们可以引入一个所有实例都可以访问的分布式缓存层。本教程中,我们将学习如何在 Spring 中实现两级...

详情...