Javaマルチスレッドプログラミングの初心者です。私はDiner
と呼ばれる実行可能クラスを持っていて、プログラム内のさまざまな変数の状態に基づいて、Diner
クラスの異なるメソッドを並列実行したいというユースケースがあります。 これを行う1つの方法は、以下に示すように実行したい異なるコードブロックに対応する複数のif条件を含む単一のrun()メソッドを持つことです。スレッド内で実行可能な複数のメソッドを持つJavaクラス
public class Diner implements Runnable {
Order order;
int arrivalTime;
public void run() {
if(!isSeated){
//do something to get a seat
}
if(!notEatenYet){
//place order
}
if(!orderHasArrived){
//start eating
}
if(finishedEating){
//pay bill and leave
}
}
}
しかし、これを行うにはもっとエレガントな方法がありますか?並列化できるメソッドを1つしか持たないのと同様に、クラス内で並列化できるメソッドが異なります(オーバーロードrun()
?)。
私はAkka Actorsを使ってこのようなことができると信じていますが、私はネイティブソリューションを探しています。
あなたはこれを参考にしましたか?http://crunchify.com/how-to-run-multiple-threads-concurrently-in-java-executorservice-approach/ –
@RajithPemabanduあなたが参照した記事は、単にExectutorService '複数のスレッドを起動して管理するのではなく、それぞれに個別の' Thread'オブジェクトを作成することです。作成されるすべてのスレッドは、並列に、すなわちホストにpingを実行する必要があるタスクを1つしか持たない。それは私の質問が指していることではありません。 –
あなたは本当にクラスのメソッドを並行して実行したいですか?私はほとんど座っている食べて、食べ、そして請求書を支払う食堂を想像することはほとんどありません:この行動は厳密に逐次的です。 –