在访问方法中使用相同的 UI 实例

using the same UI instance inside access method

我有一个 class 实现 Runnable 并提供额外的字段来存储线程的当前自定义 UI 实例(扩展 UI class)。

它调用的 run 方法内部

@Override
public void run() {
    ui.access(() -> ui.getPoolingManager().unregisterPollRequest(this));
}

其中ui是线程实例化时设置的当前线程字段。

问题 - 在 labmda 中使用相同的 ui 实例调用 accessgetPoolingManager(自定义方法)时是否存在一些可能的并发问题?

除非 PoolingManager 本身使用 ThreadLocals 或类似的,否则我不这么认为。您在访问方法中锁定了 UI 实例,因此访问其他 fields/methods 没有问题。

来自 documentation:"The given runnable is executed while holding the session lock to ensure exclusive access to this UI. If the session is not locked, the lock will be acquired and the runnable is run right away. If the session is currently locked, the runnable will be run before that lock is released." 和 "Please note that the runnable might be invoked on a different thread or later on the current thread, which means that custom thread locals might not have the expected values when the command is executed."