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