我正在使用 JavaFX 開發應用程式,并且我具有以下結構,其中包含在 Controller 類中創建的物件“config”,然后我從擴展原始 Controller 類的兩個類以及其他執行緒訪問配置。
public class Controller {
protected Config config = new Config();
private void setupConfig() {
var machineStatus = new MachineStatus();
machineStatus.setRemainingTime(25);
machineStatus.setMessage("Running");
config.setMachineStatus(machineStatus);
}
}
public class MainController extends Controller {
Thread taskThread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
var newStatus = getNewStatus(); // Returns new status containing different RemainingTime and Message value every time
config.setMachineStatus(newStatus);
Thread.sleep(10000);
}
}
});
taskThread.start();
}
public class StatusController extends Controller {
System.out.println(config.getMachineStatus().getRemainingTime()) // Always prints 25
System.out.println(config.getMachineStatus().getMessage()) // Always prints "Running"
}
public class Config {
private MachineStatus machineStatus;
public MachineStatus getMachineStatus() {
return machineStatus;
}
public void setMachineStatus(MachineStatus value) {
machineStatus = value;
}
}
public class MachineStatus {
private int remainingTime;
private String message;
public int getRemainingTime() {
return remainingTime;
}
public void setRemainingTime(int value) {
remainingTime = value;
}
public String getMessage() {
return message;
}
public void setMessage(String value) {
message = value;
}
}
我想實作這一點,當我在 StatusController 中呼叫 getRemainingTime() 或 get Message() 時,我將始終獲得寫入配置變數的最新狀態。但相反,我仍然得到初始化變數時存盤的初始值。
第二個執行緒每 10 秒運行一次,并始終使用新機器狀態更新配置變數。即使我讓第二個執行緒運行幾分鐘,在 StatusController 中,我總是得到初始值。
有人可以幫助我如何實作這一目標嗎?
uj5u.com熱心網友回復:
啊,明白了。看起來您認為 StatusController 和 MainController 訪問的是同一個 Config 實體。但它不是那樣作業的。
StatusController extends Controller
MainController extends Controller
每個控制器都有自己的 Config 物件實體。這意味著 MainController 更改了 MainController 的配置。但是 StatusController 有自己的 Config。您需要訪問 MainController 的配置并列印它們的狀態。
第二個問題。配置不是執行緒安全的。由于 CPU 快取等原因,您可能看不到執行緒的變化。您可以使用任何同步概念來解決它。
rzwitserloot - 已經回答...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496646.html
上一篇:我如何加快PIL中的這種像素回圈
