使函数线程安全的类

Posted

技术标签:

【中文标题】使函数线程安全的类【英文标题】:make function thread safe of class 【发布时间】:2020-09-02 10:16:33 【问题描述】:

字符串获取器和设置器。如何使线程安全

【问题讨论】:

【参考方案1】:

即使在单线程程序中,这也不会很好地结束。 getString 分发指向由strVar 管理的存储的指针。稍后的setString 调用可能会导致字符串重新分配其存储空间,从而使该指针悬空。任何挂在这个指针上并在以后尝试使用它的客户端都会触发未定义的行为。

线程会使这个问题变得更糟。假设有人在一个线程上调用getString。有可能另一个线程调用setString 并在getString 返回它之后和它的调用者有机会实际使用它之前使指针无效。在getString 内加锁无济于事。您需要返回共享状态的副本,而不是指向相同状态的指针。

是的,读取和写入需要同步。仅使用锁保护写入是不够的 - 两者都必须在锁下发生,否则会出现数据竞争。

【讨论】:

我无法解析这句话,对不起。 不是getString 目前的设计方式。它将指向共享数据的指针传递给调用者,调用者别无选择,只能在锁之外不受保护地访问它。

以上是关于使函数线程安全的类的主要内容,如果未能解决你的问题,请参考以下文章

java多线程3.设计线程安全类

设计线程安全的类--对象的组合

我应该始终使我的 java 代码线程安全,还是出于性能原因仅在需要时才这样做?

如何使我的 ArrayList 线程安全? Java中解决问题的另一种方法?

Java自学-多线程 线程安全的类

如何做到类的线程安全