multithreading - 最佳实践 : hasXXX() methods for possible null returning getXXX() methods

标签 multithreading

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

2年前关闭。




Improve this question




这个问题可能看起来很简单,但我还没有找到答案,所以我在问堆栈溢出社区。正如标题所示,我有一个带有几个 getXXX() 方法的类,其中一些方法可能返回 null。这是记录在案的,此类的用户应该了解这一事实。

为了简化这个类的使用,我想添加一些方便的 hasXXX() 方法来指示是否设置了特定字段。首先,这似乎是个好主意……但随后想到了线程安全。

由于此类的实例可能会跨线程共享,因此属性的值可能会更改。众所周知,只有当我们知道调用 check-method 后状态不会改变时,check-then-act 才有可能,即使我们在执行 check-then-act 操作时被打断。

我想到了以下解决方案:

  • 为此类的用户提供一种在执行检查然后执行代码时“锁定”实例以进行状态更改的方法。
  • 删除 hasXXX() 方法,因为它们对可变类无用。

  • 我不认为这是一个罕见的案例,一些 SO 成员之前可能已经发现了这个问题并找到了解决方案......

    福拜尔兴

    最佳答案

    没有必要把事情复杂化——用户知道 XXX 是否没有设置,因为 getXXX() 返回 null。

    
    if ( (x=bar.getXXX()) ) {
       x.foo();
    }
    

    是明确的
    
    if ( bar.hasXXX() ) {
      bar.getXXX().foo();
    }
    

    将 hasXXX 真正所做的留给想象

    关于multithreading - 最佳实践 : hasXXX() methods for possible null returning getXXX() methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1393940/

    相关文章:

    sql - 分布式事务如何在线程环境中与同一个 DB 的多个连接一起工作?

    c# - 异步文件和文件夹复制 - C#

    multithreading - 如何在线程之间共享 LWP::UserAgent 对象

    java - 在多线程应用程序中使用 VTD

    c++ - GST_DEBUG : How to save logs in a separate file for a thread inside an application

    multithreading - 什么是内核线程调度?

    c++ - 在并行计算机上启动应用程序时出现性能问题

    windows - Windows 线程何时需要消息循环,为什么?

    c# - Reactive Extensions是否可以满足顺序不变性,同步和多线程?

    ios - 调用 didEnterBackground 后是否可以在主线程上执行某些操作?