3

Java ランドでのマルチスレッド化と同時実行性に関しては、マルチスレッド化するコードを「タスク」として分離し、そのタスクを何らかのエグゼキュータ サービスまたはスレッド プールに送信するというコンセンサスがあります。

私が疑問に思っているのは:

  • タスクは任意のオブジェクトの任意のメソッドにすることができますそれとも何か特別なものにする必要がありますか (そうであれば、何を)?
  • このタスクが CPU バウンドか、IO バウンドか、またはその他かをどのように判断しますか? 「デッドプレゼント」やその他の決定要因は何ですか?

ここで明確にしていただきありがとうございます!

4

3 に答える 3

2

見てみましょうExecutorService

  • submit(Callable)
  • submit(Runnable)

タスクは、おそらく 2 つのインターフェイスのいずれかである必要があります (常に他のメソッドを呼び出すことができます)。

IE、ファイルへの読み取り、ファイルへの書き込み、ソケットからの読み取り、ソケットへの書き込みなど、タスク内で入出力操作を実行する場合、タスクはおそらく IO バウンドです。

于 2012-05-02T00:38:22.540 に答える
0

Threads通常、 を実装するクラスで見つけたコードを実行しますRunnable

于 2012-05-02T00:32:48.157 に答える
0

タスクは任意のオブジェクトの任意のメソッドにすることができますか、それとも何か特別なものにする必要がありますか (そうであれば、何を)?

それは何でもかまいません。大きな問題は、タスクに他のスレッドと共有されるいくつかのオブジェクトが含まれている可能性があることです。これらのオブジェクトへのアクセスがスレッドセーフであることを確認する必要があります。これは複雑なトピックです。Goetz らによる「Java Concurrency in Practice」は非常に優れた本です。

于 2012-05-02T01:01:48.163 に答える