gpt4 book ai didi

java - JavaFX 属性对象对于多个异步写入来说是线程安全的吗?

转载 作者:行者123 更新时间:2023-11-30 08:08:00 25 4
gpt4 key购买 nike

JavaFX 中 Property 的标准实现从多个线程调用 set 方法是否危险?我并不真正关心客户端读取然后设置操作的竞争条件。我想知道如果多个线程调用其 set()setValue() 方法,Property 本身是否会在内部被损坏。

下面这段代码是线程安全的吗?

public class ThreadSafeProperty {

public static void main(String[] args) {

ObjectProperty<Integer> property = new SimpleObjectProperty<>(5);

ExecutorService exec = Executors.newFixedThreadPool(5);

property.addListener((obs,o,n) -> System.out.println("OLD: " + o + " NEW: " + n));


exec.execute(() -> property.set(4));
exec.execute(() -> property.set(6));
exec.execute(() -> property.set(11));

try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
exec.shutdown();
}
}

最佳答案

SimpleObjectProperty 不是线程安全的。

您在源代码中看到这一点:javafx/beans/property/ObjectPropertyBase.set 未同步,或者您使用类似 http://vmlens.com 的工具女巫正在寻找你:-)

vmlens report

关于java - JavaFX 属性对象对于多个异步写入来说是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30811032/

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