Java (JavaFX8)에서 간단한 서버 모니터링 응용 프로그램을 작성했습니다. 현재 구현에서는 대상 머신을 하나씩 핑 (ping)하여 JavaFX LineChart에 그래프로 표시 할 수 있습니다. 각 기계는 ArrayList (Observable)에있는 "대상"객체입니다. 내 문제는 "하나씩"부분입니다. 대상을 ping하는 코드는 ping을 반환하는 Callable입니다. 필자는 어쨌든 한 번에 4 개 이상의 대상에 대해 ping을 수행 할 수 있도록 프로세스를 다중 스레드해야합니다. 과거의 시도로 인해 동일한 대상을 동시에 핑하는 4 개의 스레드와 같은 단점이 발생하여 매우 중요한 프로세서 중복이 발생했습니다. Heres는 내 전류 루프는 ...
public void beginPing() {
ExecutorService exec = Executors.newCachedThreadPool();
Runnable r = new Runnable() {
@Override
public void run() {
while (true) {
for (Target t : targets) {
String ping = null;
if (t.flagsProperty().get().contains("A")) {
try {
Callable c = new Pinger(t);
ping = c.call().toString();
switch (ping) {
case "TIME_OUT":
for (XYChart.Series s : lineChart.getData()) {
if (s.getName().equals(t.nameProperty().get())) {
addToChart(s, cycle, 00.00);
}
}
t.setStatus("TIME OUT");
t.setLastrtt("TIME_OUT");
t.setTimeouts(t.timeoutsProperty().get() + 1);
logUtil.log(LogUtil.INFO, t.nameProperty().get() + " - timed out!");
break;
case "UNKNOWN_HOST":
t.setStatus("ERROR");
t.setLastrtt("UNKNOWN HOST");
logUtil.log(LogUtil.WARNING, t.nameProperty().get() + " - unknown host!");
break;
case "UNREACHABLE":
t.setStatus("ERROR");
t.setLastrtt("UNREACHABLE HOST");
logUtil.log(LogUtil.WARNING, t.nameProperty().get() + " - is unreachable!");
break;
default:
t.setLastrtt(ping);
t.setStatus("ACTIVE");
for (XYChart.Series s : lineChart.getData()) {
if (s.getName().equals(t.nameProperty().get())) {
addToChart(s, cycle, Double.valueOf(ping));
}
}
break;
}
} catch (Exception e) {
logUtil.log(LogUtil.CRITICAL, e.getMessage() + ", "+ e.getCause());
e.printStackTrace();
}
}
}
cycle++;
rangeChart(cycle);
updateInfo();
}
}
};
exec.execute(r);
}
나는 당신이 그걸 위해 –
에 대해 4 개의 개별 쓰레드를 만들어야한다고 생각한다.하지만 문제는 내가 그렇게해야한다는 것이다. 그래서 4 개의 개별 쓰레드는 같은 타겟 t에 대해 반복하지 않는다. 그렇지 않으면 동시에 4 개의 스레드가 동일한 작업을 수행하여 ConcurrentModificationExceptions 및 무의미한 중복성으로 이어질 수 있습니다. –
JavaFX의 배열을 통해 멀티 스레딩 호출을위한 샘플 코드가 있습니다. [JavaFX2의 작업간에 진행률 표시기를 재설정하는 방법은?] (http://stackoverflow.com/questions/16368793/how -to-reset-progress-indicator-between-tasks-javafx2) – jewelsea