You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DI注入单例类多线程调用方法的线程安全与变量生命周期问题

单例类多线程调用方法的线程安全性问题

问题描述

假设将如下类注册为单例,当多线程调用其Create()方法时会发生什么?所有线程能否同时访问该方法?若有10个线程调用此方法,是否会创建10个numbers变量并在方法作用域结束后被销毁?由于该类没有任何类级属性,我认为它是线程安全的,这个判断是否正确?

代码示例

// 注册代码
builder.Services.AddSingleton<ISingleton, SingletonTest>();

public interface ISingleton
{
    int Create(int number);
}
public class SingletonTest : ISingleton
{
    public int Create(int number)
    {
        List<int> numbers = new List<int>();

        numbers.Add(number);
        return numbers.Count;
    }
}

解答

  • 多线程调用Create()的行为:多个线程可以同时访问该方法。因为Create()方法内的所有变量(包括numbers)都是局部变量,每个线程调用方法时,会在自身的线程栈上独立分配这些变量的内存空间,线程间的局部变量完全隔离,不会互相干扰。
  • 10个线程调用的变量创建与销毁:是的,10个线程会各自创建10个独立的numbers实例。每个numbers的生命周期仅限于当前线程的方法执行过程,方法执行完毕退出作用域后,这些局部变量会成为垃圾,后续被.NET垃圾回收器回收。
  • 线程安全性判断:你的判断完全正确。线程安全问题的核心是共享状态的并发访问,而这个单例类没有任何类级(实例或静态)成员变量,所有状态都封装在方法内部的局部变量中,不存在多线程共享同一状态的情况,因此完全是线程安全的。

内容的提问来源于stack exchange,提问作者stuck_inside_task

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:50:55