中级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. 在实际应用中,需要根据具体情况选择合适的线程安全计数器实现。
相关推荐
甲枫叶1 分钟前
【claude产品经理系列13】核心功能实现——需求的增删改查全流程
java·前端·人工智能·python·产品经理·ai编程
时艰.2 分钟前
分布式事务在电商项目中的应用
java·分布式
倚肆2 分钟前
Spring WebSocket 核心注解详解
java·websocket·spring
浅念-4 分钟前
C++ STL list 容器
开发语言·数据结构·c++·经验分享·笔记·算法·list
重生之后端学习6 分钟前
39. 组合总和
java·数据结构·算法·职场和发展·深度优先
百锦再8 分钟前
Spring Boot Web 后端开发注解核心
开发语言·spring boot·python·struts·spring cloud·kafka·maven
QQ 31316378908 分钟前
文华财经指标公式
java
nix.gnehc8 分钟前
深入理解Go并发核心:GMP模型与Goroutine底层原理
开发语言·算法·golang
毕设源码-赖学姐12 分钟前
【开题答辩全过程】以 基于SpringBoot Vue的网络课程销售管理系统为例,包含答辩的问题和答案
java·spring boot·后端
Dylan的码园15 分钟前
多线程的创建与管理
java·开发语言·多线程