2015-06-12 4 views
1

Опасно ли для стандартных реализаций Property в JavaFX вызывать методы набора из нескольких потоков? Мне не все равно, что на клиентской стороне условия гонки зависят от операций чтения и установки. Я хочу знать, может ли сам Property быть поврежден внутренне, если несколько потоков вызывают его метод set() или setValue().Являются ли объекты JavaFX 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(); 
    } 
} 

ответ

1

SimpleObjectProperty не является потокобезопасным.

Вы видите это в источнике: JavaFX/бобы/недвижимость/ObjectPropertyBase.set не синхронизированы, или вы используете инструмент, как http://vmlens.com ведьма выглядит для вас :-)

vmlens report

Смежные вопросы