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

Are JavaFX Property objects threadsafe for multiple asynchronous writes?

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之类的工具找你:-)