中级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. 在实际应用中,需要根据具体情况选择合适的线程安全计数器实现。
相关推荐
Lyyaoo.13 小时前
【JAVA基础面经】JAVA中的泛型
java
自然常数e13 小时前
预处理讲解
java·linux·c语言·前端·visual studio
大数据新鸟13 小时前
设计模式详解——模板方法模式
java·tomcat·模板方法模式
无籽西瓜a13 小时前
【西瓜带你学设计模式 | 第四期 - 抽象工厂模式】抽象工厂模式 —— 定义、核心结构、实战示例、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·抽象工厂模式
lly20240613 小时前
jEasyUI 创建子网格
开发语言
always_TT13 小时前
内存泄漏是什么?如何避免?
android·java·开发语言
白鸽梦游指南13 小时前
docker仓库的工作原理及搭建仓库
java·docker·eureka
※DX3906※13 小时前
SpringBoot之旅4: MyBatis 操作数据库(进阶) 动态SQL+MyBatis-Plus实战,从入门到熟练,再也不踩绑定异常、SQL拼接坑
java·数据库·spring boot·spring·java-ee·maven·mybatis
java1234_小锋13 小时前
Java高频面试题:怎么实现Redis的高可用?
java·开发语言·redis
oyguyteggytrrwwwrt13 小时前
抄写YOLOE源码——先抄写ultralytics包,关于__init__.py
开发语言·python