私はThreadPoolTaskExecutor
を持っています。Runnable
を実装するProcess
を作成すると、executor.execute(process)
を実行します。ThreadPoolTaskExecutor経由でスレッドを繰り返す
は今、execute
を呼び出す前に、私はProcess
オブジェクトから一つのフィールドをチェックし、他のすべてのは、現在、私のThreadPoolTaskExecutor
によって実行のプロセスを、実行しているとそれを比較したいです。どのように私はそれを行うことができますが、同時に発生する問題はありませんか?
コード:
public class MyApp {
ThreadPoolTaskExecutor executor;
//...
public void runProcesses {
Process firstone = new Process(1);
Process nextOne = new Process(1);
// iterate through all processes started via executor and currently running,
// verify if there is any process.getX() == 1, if not run it
executor.execute(firstone);
//wait till firstone will end becouse have the same value of X
executor.execute(nextOne); // this cant be perform until the first one will end
}
}
public class Process {
private int x;
//...
public Process (int x){
this.x = x;
}
public int getX(){
return this.x;
}
}
私は、プロセスのシンプルSet
をcreateing考えていたが起動し、そこに新しいものを追加します。しかし、私はそれがまだ実行されていると判断し、それが完了したらセットから削除する方法に問題があります。今はスレッドの実行を繰り返すことを考えていますが、どうしたらいいのか分かりません。
- すべてではありません。この種のチェックを行うときは、常に並行性の問題に対処する必要があります。実際にチェックしているのは何ですか?おそらくあなたは別の方法でそれをすることができますか? – Fildor
私が言及したことを確かにチェックしています。言い換えると、フィールドxの値が同じであるプロセスは2つありません。私は私がする必要があるwhantrateに多くのコードを追加しました。 – ilovkatie