2016-11-25 11 views
0

私はred-blackツリーを使ってスケジューラを構築しようとしています。 ツリーには実行可能なすべての実行可能なタスクがあります。ツリー内のタスクの1つを4つの作業スレッドの1つに割り当てる独自のスケジュール関数を作成する予定です。すべてのスレッドは定期的にスケジューラにアクセスして、同じタスクを続行するか新しいタスクに切り替える必要があるかどうかを確認します。 これで、特定のタスクを停止して新しいタスクを割り当てるスレッドを作ることができます。 停止したタスクはツリーに戻り、他のスレッドが実行を続けるのを待ちます。与えられたスレッドのタスクを切り替える

私は、停止するタスクから格納する変数/データがないと仮定します。

私が見たすべてのリソースは、Java Executorサービスを使用するか、単なるタスクをスレッドに割り当てるだけです。だから、私はここにいくつかの助けが必要です...

+2

シンプル:ノーウェイです。あなたが得ることができる最も近いのは、メソッド呼び出しごとにちょっとした作業を行う特定のタスクインターフェイスです。メソッドが返ってきたら、あなたのチェックをすることができます。 –

+0

あなたが言ったとき:* "すべてのスレッドは定期的に同じタスクを続けるか、新しいタスクに切り替える必要があるかを見るために定期的にスケジューラーにアクセスします" *ということは、タスクそのもののコードが何らかの 'yield'関数定期的に自分自身をスワップアウトすることができます。その場合、これはより実行可能な問題になります。 – selbie

+0

各タスクはそれ自身のスレッドであり、スケジューラ(自身のスレッド上で実行している)が各タスクスレッドで 'suspend'と' resume'を呼び出すだけで、4つのスレッドがいつでも実行できることを保証できますか? 'suspend'と' resume'はJavaでは非推奨ですが、これが学問的な目的のためのものであれば、シンプルな設計に役立ちます。 – selbie

答えて

-1

クォーツを使用して、あなたはリメイクラウンドは必要ありません、クォートはあなたのためにすべてを行います。

+0

これは私のプロジェクトの一部なので、残念ながら、私は石英を使用することはできません。私は自分でスケジューラを構築する必要があります。 – Keet

+0

ハム..私は理解しています、これは大きな仕事です。あなたが建築家を必要とするなら、私に電話してください。 これはいい仕事です。 –

0

あなたは仕事の塊をするためにあなたの "仕事"を書いておき、最後に何をやめたかを何度も呼び出せるようにreturnを書く必要があります。

私はあなたが積極的にタスクを中断する何かを求めていることは知っていますが、それは実行中のプログラムがアクティブなスタックを持つためにナンセンスです。そのスタックを別のスレッドに再割り当てする方法はありません。スレッドは、です。

これをJavaで達成する唯一の方法は、毎回スタックを実際に開始位置にポップバックするタスクを書き込むことです。その場合にのみ、キューからこれらの再入可能なタスクを選択し、それらを交換可能に呼び出すスレッドのプールを持つことができます。

関連する問題