私のwhile(true)
は一度しか実行されていないので、何が起こっているのかを確認するためにブレークポイントを追加しようとしていますが、私のrun()
. IntelliJ を使用しています。デバッガーには「スレッド」タブがあります。ブレークポイントに到達するために適切なスレッドを選択するなど、そのタブで何かをする必要がありますか? スレッド名も表示され、このリストで適切なスレッドを見つける方法を知りたいと思っています。
public class MyClass extends ServerWorkflowProcess<OtherClass> {
private ExecutorService executorService = Executors.newSingleThreadExecutor();
...
@Override
public void bootup() {
logger.info("Booting up: " + this);
BackgroundProcess backgroundImpositioner = new BackgroundProcess(this.getCollection());
executorService.submit(backgroundImpositioner);
}
@Override
public void shutdown() {
executorService.shutdown();
}
}
バックグラウンド プロセス
public class BackgroundProcess implements Runnable {
protected volatile Logger logger = Logger.getLogger(BackgroundImpositioner.class.getName());
Collection<ImpositionWorkstation> impositionWorkstations;
public BackgroundImpositioner(Collection<ImpositionWorkstation> impositionWorkstation) {
this.impositionWorkstations = impositionWorkstation;
}
public void run() {
while(true) {
logger.info("looping");
for (ImpositionWorkstation workstation : impositionWorkstations) {
if (workstation.canAcceptWork()) {
//go do work in another thread so we're not blocking this
workstation.getWorkFromQueue();
try {
workstation.doWork();
} catch (ImpositionException e) {
logger.severe(e.getMessage());
}
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
logger.severe("Background impositioner was interrupted");
}
}
}
}
補足: コンソールには「ループ」が表示されるため、一度実行されることがわかります。ブレークポイントがヒットすることはなく、複数回実行されることもありません。