最近投稿した別の質問では、whileループの代わりにSwingWorkerでjava.util.Timerを使用するように提案されました。SwingWorkerのタスクは10秒ごとに実行されることになっています。
私の理解では、java.util.Timerはタスクを実行するためのバックグラウンドスレッド(run())を作成します。
SwingWorkerスレッドでjava.util.Timerを使用する場合、スレッド(SwingWorker)に別のスレッド(Timer)を作成するのは非効率的ではありませんか?
以下の2つの例を見て、どちらが正しいかを教えてください。どちらも正しくない場合は、他に何を使用する必要がありますか(可能であれば、短いサンプルコードを提供してください)。ありがとうございました
例1-java.util.Timerを使用する
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.SwingWorker;
public class Example1 extends SwingWorker<Void, String> {
@Override
protected Void doInBackground() {
int delay = 10000;//Delay for 10 seconds
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
String database = "";
//PARSE THE SQL DATABASE
publish(database);//UPDATE THE GUI
}
}, delay);
return null;
}
@Override
protected void process(List<String> s) {
//UPDATE THE GUI
}
}
例2-Whileループの使用
import java.util.List;
import javax.swing.SwingWorker;
public class Example2 extends SwingWorker<Void, String> {
@Override
protected Void doInBackground() {
while (!this.isCancelled()) {
String database = "";
//PARSE THE SQL DATABASE
publish(database);//UPDATE THE GUI
try {
synchronized (this) {
this.wait(10000);//Wait 10 seconds
}
} catch (Exception ex) {
}
}
return null;
}
@Override
protected void process(List<String> s) {
//UPDATE THE GUI
}
}