返回静态变量时的线程安全

Posted

技术标签:

【中文标题】返回静态变量时的线程安全【英文标题】:Thread safety when returning static variables 【发布时间】:2015-01-12 23:08:25 【问题描述】:

我正在为 ios 应用程序实现本质上是“主题”的东西。主题在编译时是已知的,并且永远需要在运行时更改/重新加载。

我创建了一个Theme 类,它的工作是为当前主题提供适当的UIColor 对象。类的相关部分如下所示:

主题.h:

 +(UIColor*)primaryColor;

主题.m

static UIColor *primaryColor;

//only ever called once, during +[Theme initialize]
+(void)configureColors 
    primaryColor = [UIColor blueColor];


+(UIColor*)primaryColor
    return primaryColor;

请注意,+configureColors 的最终实现将包含一个 if 测试,以根据所需的主题设置不同的颜色

在这种情况下我需要担心线程安全吗?有更好的方法吗? 我担心会同时向+primaryColor 拨打2 个电话。

【问题讨论】:

【参考方案1】:

您可以对primaryColor 进行一百万次并发调用并且没有问题(除了线程太多:))。这是一个只读方法。

唯一可能的问题是primaryColor 是否与configureColors 同时被调用。这不是问题,因为您是从标准的initialize 方法调用configureColors

除此之外,您很可能会从主线程调用 primaryColor,因为您可能正在处理 UI 更新。

【讨论】:

以上是关于返回静态变量时的线程安全的主要内容,如果未能解决你的问题,请参考以下文章

java线程安全问题之静态变量实例变量局部变量

java线程安全问题之静态变量实例变量局部变量

java线程安全问题之静态变量实例变量局部变量

java线程安全问题之静态变量实例变量局部变量

java 局部静态变量在多线程环境下是不是有线程安全问题??

java线程安全问题之静态变量实例变量局部变量