gpt4 book ai didi

java - 这段代码中的 AtomicBoolean 是否矫枉过正?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:22 25 4
gpt4 key购买 nike

这是我编写的一些代码,用于以通用方式处理一个事件处理程序,该事件处理程序对于任何 JavaFX 事件都应该只触发一次:

public final class OneShotEvent<T extends Event>
implements EventHandler<T>
{
private final AtomicBoolean triggered = new AtomicBoolean(false);
private final EventHandler<T> delegate;

public static <E extends Event> EventHandler<E> of(final EventHandler<E> delegate)
{
return new OneShotEvent<>(delegate);
}

private OneShotEvent(final EventHandler<T> delegate)
{
this.delegate = Objects.requireNonNull(delegate);
}

@Override
public void handle(final T event)
{
if (!triggered.getAndSet(true))
delegate.handle(event);
}
}

出于某种原因,我将 triggered 设为 AtomicBoolean 而不是普通的 boolean

在考虑之后,我认为这是矫枉过正,因为事件处理程序将在 JavaFX 的“平台线程”上运行……或者它们不会?因为如果是这种情况,那么一个简单的 boolean 值就足够了……对吧?

最佳答案

如果您知道调用是单线程或线程安全的,那么一个简单的 boolean 值就足够了,尽管您可以放弃它。

private EventHandler<T> delegate;

public void handle(T event) {
if (delegate != null)
delegate.handle(event);
delegate = null; // don't retain a delegate we don't need
}

关于java - 这段代码中的 AtomicBoolean 是否矫枉过正?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35723030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com