在普通的Java(非JavaFX)环境中,通常使用volatile boolean running
来管理多线程任务。如果我想将它包装成JavaFX属性等价物,我该怎么做呢?
我计划以这种方式实现它,但我不知道它是否正确:
private volatile boolean isRunning;
private final BooleanProperty running = new SimpleBooleanProperty(true) {
@Override protected void invalidated() {
isRunning = get();
}
};
public final BooleanProperty runningProperty() { return this.running; }
public final boolean isRunning() { return this.running.get(); }
public final void setRunning(boolean value) { this.running.set(value); }
public void run() {
while (isRunning) {
// Do my stuff...
}
}
// Reside in another class...
public void methodFromAnotherClass() {
taskRunningProperty().bind(myTask.runningProperty());
}
该属性将始终从JavaFX Application线程调用,但run()
中的任何内容都在另一个线程上。