JavaFX Property对象是否适用于多个异步写入?

时间:2015-06-12 19:44:59

标签: java multithreading concurrency javafx javafx-8

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

此代码是否在线程安全下?

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();
    }
}

1 个答案:

答案 0 :(得分:1)

SimpleObjectProperty不是线程安全的。

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

vmlens report