2013-08-14 24 views
5

Java開発でマルチスレッドをいつ使うべきか、それを使用する理由とその理由はわかりません。さまざまなシナリオでどのように役立ちますか?いつマルチスレッドをJavaで使うべきですか?

シナリオ1

私は敵と2Dスクロールゲームを作ってるんだし、すべてのことが、金属スラグを考える

シナリオ2

私は複数のデータベースをチェックするために、データベースデーモンを作ってるんですコンテンツ。

シナリオ3

私は、データベースからフェッチされたいくつかの情報を、JSPのサーブレットを作ってるんです。

シナリオを自由に編集して改善してください。

さらに、ゲームサーバー用にマルチスレッドを使用する必要がありますか?それとも私はしないべきですか?

+7

あまりにも一般的な質問... – Sebastian

+0

@セバスチャンまあ私は検索しました私はこれを見つけましたが、私は答えに満足していませんでした。だから、私はそれが欲しいという形でやり直しました。これがあまりにも広すぎるなら、この質問もそうです:http://stackoverflow.com/questions/7419619/ –

+1

私はその質問が現在保留から外れるほど具体的であると信じています。 – supersam654

答えて

5

Java開発でマルチスレッドを使用する必要があるとき、およびそれを使用する理由/理由はわかりません。さまざまなシナリオでどのように役立ちますか?

スレッドを使用するようにプログラムを変更するには、いくつかの理由があります。

  • プログラムが大幅に高速に実行され、実行している複数のCPU /コアアーキテクチャをより有効に利用できるようになると、多くの場合、スレッドを追加すると複雑さが増し、20%の速度向上がそれに値するものではないため、「かなり」という言葉を使用します。

    しかし、あなたのプログラムが複数のプロセッサを適切に使用するかどうかを判断して、プログラムの再加工がうまくいくようにすることは困難です。多くの処理/計算が必要な場合にのみ、スピードアップが得られます。たとえば、プログラムがIO(ディスクまたはネットワークの読み取りまたは書き込み)を待っている場合、プログラムを複数のスレッドに分割するだけでスピードの向上が見られない場合があります。

  • プログラムの複数の部分が同時に実行される必要がある場合。 1つのスレッドで実行できないのではなく、そうすることはより複雑になります。たとえば、Webサーバーには複数の要求処理スレッドがあります。なぜなら、複数のスレッドでより高速に処理できるように、サーバーから負荷をかけていなくても、各スレッドが単一の要求を処理する方が簡単だからです。

また

:J2EEのもののために同じ質問、私は私のサーブレットでマルチスレッドを使用する必要がありますか?それとも私はしないべきですか?

私は上記と同じ回答が当てはまると思います。一般に、サーブレットは非常に小さなタスクであり、すぐに戻るように設計されているため、スレッドをフォークするのは比較的まれです。ただし、サーブレットを起動する必要があるが、「開始ジョブ」タイプの応答を返す必要がある、長時間実行されるタスクがある場合は、スレッドが必要になります。

サーブレットが実行されるときに上流のハンドラは既にスレッドプールを使用している可能性がありますので、何もする必要はありません。


編集:

シナリオ1 - 私は敵と2Dスクロールゲームを作ってるんだし、すべてのことは、私は良いを持っていない

メタルスラッグを考えますこれに答える。多くのレンダリングが行われているかどうかによって異なりますが、使用しているツールキットによって異なります。

シナリオ2 - 複数のデータベースコンテンツをチェックするデータベースデーモンを作成しています。

複数のスレッドがあなたに何かを与えることができないように、あなたはデータベースIOバウンドになる可能性があります。また、長いクエリを実行している場合、短いクエリが他のスレッドで並列に実行される可能性があります。これは、データベースが複数の接続をどのように処理するかによっても異なります。

シナリオ3 - 私はいくつかの情報をデータベースから取得してJSP用のサーブレットを作成しています。

応答が情報を取得するのを待つ必要がある場合、別のスレッドでこれを行う理由はありません。しかし、上記のように、サーブレットがバックグラウンドで実行される何らかのデータベーストランザクションをフォークしようとしている場合は、スレッドを使用する必要があります。

ここでも、ほとんどのサーブレットコンテナはすでにスレッドプール内で実行されています。

+0

Tomcatのようなサーバーは自動的にマルチスレッドを処理しますか? –

+0

右@Louie。サーブレットが呼び出される頃には、すでに複数のスレッドが利用されています。 jconsoleでそれらを見ることができます。 – Gray

1

マルチスレッドは、何かを並列化できると思ったり、非同期にすることができます。

例えば並列化:ウェブクローラを構築する際、あなたはなどさまざまなページを閲覧する並列スレッドを持つことができますまた、これは、より良いリソース(CPU、I/Oなど)を利用することを意味するかもしれません

非同期意味であなたがコードを生成して残りのコードを消費する生産者の場合、

0

-Thenあなたはいけない、私は、Java開発で

をマルチスレッドを使用する必要があるとき、私は知りません。また、あなたがそれを避けることができれば、是非それをしてください。

例:異なるブローカーシステムを更新するために、複数のサイト/リソースからの異なる株式のマーケットシェア値を正確に同時に取得する必要がある場合は、単一のスレッドが取得する必要があります1つのサイトから最初に取得する前に、次のサイトから取得しようとします。

あなたquestion-であなたの編集から基づい

Secnario 1:私はメタルスラッグを考える、敵との2Dスクロールゲームとすべての を作ってるんだはいすることができます

。一例として、「Loading ...」と表示している間に、あるスレッドでリソースをロードすることがあります別のスレッドで、画面上の「アニメーション。

+0

プロセッサーの戦争がヘルツではなくコアに基づいている時に、私は「あなたがそれを避けることができれば、どうか言いなさい」と言うのは賢明ではないと思う。はい、不適切または間違って使用すると問題を引き起こす可能性があるが、すべての費用をかけてそれを避けなければならないという意味ではありません。責任を持ってマルチスレッドを使用する必要があります。 – digitaljoel

+0

@digitaljoelあなたは間違っています。私の答えは、「Java開発でマルチスレッドをいつ使うべきかわかりません」という意味で、彼らはまだ新しいことを意味し、質問に答えることができたら、あなたが言ったことを知るのに十分な調査/研究をしました。しかし、OPはいつ使うべきかを知りたいので、私は例を挙げました。 –

1

一度マルチスレッド学ぶようですが、あなたはあなたがそれを必要とするときは、マルチスレッドを使用しています。いつでもどこでもそれを使用し、実際にはありません。

たとえばあなたが長いタスクを持っていますUIをロックしたくない場合は、UIがうまくいく間に別のスレッドでタスクを実行することができます。

もう1つは複雑なことを計算することです多くの独立したステップでは、マルチスレッドを使用して並行して実行することができます。

0

ファイルのダウンロードを担当するアプリケーションで、複数のスレッドを使用しない場合、他のすべての命令は、ファイルのダウンロードが完了するまで待機します。スイングは、彼のGUIを表示するために特殊なスレッドを使用するので、あなたはのを見てみる必要があります

関連する問題