diff --git a/README.md b/README.md index 56c3dffd..5eec5419 100755 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ **重要知识点详解**: -- [乐观锁和悲观锁详解](./docs/java/concurrent/jmm.md) +- [乐观锁和悲观锁详解](./docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md) - [CAS 详解](./docs/java/concurrent/cas.md) - [JMM(Java 内存模型)详解](./docs/java/concurrent/jmm.md) - **线程池**:[Java 线程池详解](./docs/java/concurrent/java-thread-pool-summary.md)、[Java 线程池最佳实践](./docs/java/concurrent/java-thread-pool-best-practices.md) diff --git a/docs/home.md b/docs/home.md index 2c88abdf..e77cae7c 100644 --- a/docs/home.md +++ b/docs/home.md @@ -72,7 +72,7 @@ title: JavaGuide(Java学习&面试指南) **重要知识点详解**: -- [乐观锁和悲观锁详解](./java/concurrent/jmm.md) +- [乐观锁和悲观锁详解](./java/concurrent/optimistic-lock-and-pessimistic-lock.md) - [CAS 详解](./java/concurrent/cas.md) - [JMM(Java 内存模型)详解](./java/concurrent/jmm.md) - **线程池**:[Java 线程池详解](./java/concurrent/java-thread-pool-summary.md)、[Java 线程池最佳实践](./java/concurrent/java-thread-pool-best-practices.md) diff --git a/docs/java/concurrent/java-concurrent-questions-03.md b/docs/java/concurrent/java-concurrent-questions-03.md index 6d6d9ed6..ffa9b3fe 100644 --- a/docs/java/concurrent/java-concurrent-questions-03.md +++ b/docs/java/concurrent/java-concurrent-questions-03.md @@ -579,7 +579,7 @@ public class ThreadPoolTest { ![将一部分任务保存到MySQL中](https://oss.javaguide.cn/github/javaguide/java/concurrent/threadpool-reject-2-threadpool-reject-02.png) -整个实现逻辑还是比较简单的,核心在于自定义拒绝策略和阻塞队列。如此一来,一旦我们的线程池中线程以达到满载时,我们就可以通过拒绝策略将最新任务持久化到 MySQL 数据库中,等到线程池有了有余力处理所有任务时,让其优先处理数据库中的任务以避免"饥饿"问题。 +整个实现逻辑还是比较简单的,核心在于自定义拒绝策略和阻塞队列。如此一来,一旦我们的线程池中线程达到满载时,我们就可以通过拒绝策略将最新任务持久化到 MySQL 数据库中,等到线程池有了有余力处理所有任务时,让其优先处理数据库中的任务以避免"饥饿"问题。 当然,对于这个问题,我们也可以参考其他主流框架的做法,以 Netty 为例,它的拒绝策略则是直接创建一个线程池以外的线程处理这些任务,为了保证任务的实时处理,这种做法可能需要良好的硬件设备且临时创建的线程无法做到准确的监控: diff --git a/docs/java/new-features/java21.md b/docs/java/new-features/java21.md index 2940cc62..5f145c23 100644 --- a/docs/java/new-features/java21.md +++ b/docs/java/new-features/java21.md @@ -85,7 +85,7 @@ String name = "Lokesh"; String message = STR."Greetings \{name}."; //FMT -String message = STR."Greetings %-12s\{name}."; +String message = FMT."Greetings %-12s\{name}."; //RAW StringTemplate st = RAW."Greetings \{name}."; @@ -198,7 +198,7 @@ Integer lastElement = linkedHashSet.getLast(); // 3 linkedHashSet.addFirst(0); //List contains: [0, 1, 2, 3] linkedHashSet.addLast(4); //List contains: [0, 1, 2, 3, 4] -System.out.println(linkedHashSet.reversed()); //Prints [5, 3, 2, 1, 0] +System.out.println(linkedHashSet.reversed()); //Prints [4, 3, 2, 1, 0] ``` `SequencedMap` 接口继承了 `Map`接口, 提供了在集合两端访问、添加或删除键值对、获取包含 key 的 `SequencedSet`、包含 value 的 `SequencedCollection`、包含 entry(键值对) 的 `SequencedSet`以及获取集合的反向视图的方法。