これはインタビューの質問です。つまり、これは短時間で行うことができます。聞かれたらどうしたらいいのかわからないのでこちらで質問しようと思いました。
「非同期タスクまたは同期タスクを実行できるタスク スケジューラの設計とコーディング」
あなたの想像力/仮定を使用して、あなたの考えやコメントを共有してください.
これはインタビューの質問です。つまり、これは短時間で行うことができます。聞かれたらどうしたらいいのかわからないのでこちらで質問しようと思いました。
「非同期タスクまたは同期タスクを実行できるタスク スケジューラの設計とコーディング」
あなたの想像力/仮定を使用して、あなたの考えやコメントを共有してください.
この質問は意図的にあいまいです。問題の設計と解決がどれだけ得意か、どのような仮定を立てているか、それらをどのように正当化しているかなどを示すためのものです。単一の良い答えはありません。問題にアプローチすることです。
ここで言われているのは私の見解です:
私のスケジューラは任意のRunnable
orを取ることができます。問題をうまく抽象化できると思われるのでCallable<V>
実装します。ScheduledExecutorService
API を移植可能で使いやすいものにするために、できるだけ多くの標準クラスを使用しています。
非同期化と同期化によって、同時に実行しても安全であり、排他ロックが必要なものを理解しています。つまり、スケジューラは 2 つの同期タスクを同時に実行することはできません。
同期タスクと非同期タスクの区別は、マーカー インターフェイスを使用して行います。注釈も問題ありませんが、実行時に抽出するのは困難です。
I won't give you the full implementation, but it'll probably wrap some standard ScheduledExecutorService
with an additional synchronization for synchronized tasks. I think ConcurrentMap<Class, Semaphore>
would do. Before running tasks marked as synchronized I make sure no other synchronized task of the same time is running. I block and wait or reject (this can be configurable).
組み込みの ExecutorService を使用し、必要なことのほとんどを実行します。それらのタスクが同期を使用するかどうかは気にしません。