中级java每日一道面试题-2024年7月3日

题目:使用 Java 实现一个线程安全的计数器。

分析

要实现一个线程安全的计数器,可以使用 synchronized 关键字来保证对计数器的操作是线程安全的。以下是一个简单的实现示例:

java 复制代码
public class ThreadSafeCounter {
    private int counter;

    public synchronized void increment() {
        counter++;
    }

    public synchronized int getCounter() {
        return counter;
    }
}

在上述代码中,increment() 方法和 getCounter() 方法都使用了 synchronized 关键字来修饰,这确保了在多线程环境下,对计数器的操作是线程安全的。

解法

  1. 定义一个类来表示计数器,包含计数器的值和加 1 方法。
  2. 在加 1 方法中使用 synchronized 关键字来保证线程安全。
  3. 提供一个 getCounter 方法来获取计数器的值。

注意事项

  1. 使用 synchronized 关键字会导致性能下降,在多线程环境下,只有一个线程可以执行 synchronized 代码块,其他线程需要等待。如果线程数量较多,可能会影响性能。
  2. 如果计数器的操作非常频繁,可以考虑使用更高效的线程安全计数器实现,如 AtomicInteger 类。
  3. 在实际应用中,需要根据具体情况选择合适的线程安全计数器实现。
相关推荐
Sirius Wu12 小时前
Agent模型冷启动问题
开发语言·javascript·人工智能·机器学习·ecmascript·aigc
用户2986985301412 小时前
Java 实现 Word 文档内容复制:段落、章节与全文合并技巧
java·后端
摇滚侠12 小时前
Maven 入门+高深 SSM 案例 111-112
java·数据库·maven
Chase_______13 小时前
【Java基础 | 16】集合框架(下):Map、HashMap 与 TreeMap
java·windows
吴阿福|一人公司13 小时前
类变量和实例变量的命名规范有哪些避坑点?
开发语言·python
Aaswk13 小时前
Java项目:文件批量处理工具
java·开发语言·vscode·idea
小江的记录本13 小时前
【Spring全家桶】Spring AI核心原理、大模型集成、Prompt工程、RAG实现、AI Agent开发(附《思维导图》+《面试高频考点清单》)
java·人工智能·spring boot·后端·spring·面试·prompt
plainGeekDev13 小时前
线程安全集合 → 协程安全替代
android·java·kotlin
晚风吹红霞13 小时前
深入浅出 STL 之 map 与 set:从入门到实战
开发语言·c++
手握风云-13 小时前
Spring AI:让大模型住进 Spring 生态(五)
java·后端·spring