Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

スレッドに関して質問します

AスレッドとBスレッドで同じMというメソッドを時間差で実行するとします。
先にスタートさせるのはAスレッドです。
次にBスレッドをスタートさせます。

ここで質問なのですが、先にスタートさせたAスレッドのメソッドを、Bスレッドのメソッドが追い抜いて先に処理が終わる可能性はありますか? 

6

回答

322

閲覧

6件の回答

評価

0

そのメソッドが5分も10分もかかるならほとんど0に近いが、1秒ならあり得る。
ミリ秒オーダーなら頻繁に起こる。

評価

0

あと、何らかの原因でAスレッドの実行が途中でサスペンドされ、Bスレッドはそんなことない、という可能性もある。
例えばDBを更新するメソッドで、スレッドごとに1レコードが更新対象だとする。
Aスレッドが更新するレコードが他の処理でロックされて実行待ちになっている間に、ロックされていないレコードを更新対象とするBスレッドは一瞬で終わる、なんてケースは結構ある。

必ず順番に終わって欲しければ、自分でなんらかの制御を付けてやらないといけない。

評価

0

すいませんスレッドがどうこうなる状況がよく解らないのですが、
スレッドと言うのはJVMが管理しているのでしょうか?
例えばOSが他の状況を見極めてJVMが実行しているスレッドに割り込んで一旦ストップさせるみたいなことはしているのでしょうか?

評価

0

スレッドの実行順序を制御して目的の処理を行うことができます。
http://www.booran.com/menu/java/thread.html

評価

0

Threadはただのオブジェクトということで、JVMがころころ転がしてるだけ。そのころころにOSは手出しできないのでしょうか?

評価

0

「手出し」というのは何を意味してるんだ?
JVMに限らず、全てのアプリケーションはOSの提供する機能を使って動いているんだが。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名