• ベストアンサー

スレッド

スレッドは同時に複数の実行はできないそうですが、同時に複数の処理を行うと書かれています。実行とは開始という意味でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

実行可能状態と休止状態の違いね。 実行可能状態というのは その言葉のとおり、いつでも実行可能な状態よ。 指示さえ与えられればそのスレッドは実行されるわ。 休止状態というのは 「休止」命令が与えられている状態よ。 休止に期間が指定されていれば その期間経過後に実行可能状態になるわ。 ここで問題になってくるのは 休止状態と実行可能状態の明示的な違いよね。 どっちの状態も、実行命令が与えられれば スレッドは実行可能よ。 でも、休止状態のときに実行命令が与えられた場合 定められた休止期間を終了していないのに 実行命令が与えられたので例外が発生するわ。 消防士さんでたとえるなら 実行可能状態は指示さえあればいつでも出動可能な人 休止状態はお休み中の人ね。 お休み中に出動命令が出たら嫌だから文句(例外)を出す。 というとこで > 実行とは開始という意味でしょうか? Yes。 正確には 実行可能状態から実行中に変化させる と言うべきかしら。 > スレッドは同時に複数の実行はできないそうですが これの意味がわかったわ。 スレッドには優先順位というものがそんざいするの。 2つのスレッドに対し同時に実行命令を出しても かならずその優先順位に従って実行されるわ。 逆を言うと、この仕組みがあるのがスレッドなのよ。 言うならば、1+1=2である、っていうのと同じレベルね。 そう決めてあるの。 > 同時に複数の処理を行うと書かれています スレッドを利用しないってことは、すべての処理は順序良く実行されるわ。 つまり直列よね。 でもスレッドを使うことで、並列に処理することができるようになる。 ここまではいいかしら? この並列に行うことを「同時に複数の処理」と言っているわ。 優先順位の関係で、同時に開始することはできないけど でも動き出してしまえばそれらは同時に動いているので 同時に複数ってわけ。 長々と書いたけど 伝わるかな。 少なくとも実行可能と休止の違いは伝わったんじゃないかなーと思う

peiee
質問者

お礼

e00083さんが書かれた「マルチスレッド」について調べてから、読み直すと非常に理解できました。ありがとうございました。

peiee
質問者

補足

ありがとうございます。 >休止状態というのは >「休止」命令が与えられている状態よ。 >休止に期間が指定されていれば 「休止」命令と休止期間はコマンドプロンプトでコマンドでも入力するのですか? JAVAの話とは違うのでしょうか?どのようなコマンドを入力するのですか?

その他の回答 (3)

  • e00083
  • ベストアンサー率31% (25/80)
回答No.4

おそらくデッドロックのことでしょう。 マルチスレッドプログラミングで起こりやすいバグの1つです。 この文章的には実行とはファイルを開くなど、パソコン的な処理で 処理とはプログラム的な処理でしょう。

peiee
質問者

お礼

「スレッドは、複数の処理を同時に行うしくみである。」 この意味は、複数の処理(プログラムの実行などのプロセス)が同時に行われた場合、 その処理は、それぞれ別のメモリ領域で実行され、 それぞれのプログラムでの処理(スレッド)は、 同時に実行できるという意味かもしれません。 ありがとうございました。

peiee
質問者

補足

回答ありがとうございます。ファイルを開くという処理は確かに同時にはできませんね。 ところでプログラム的な処理とは、どのようなものでしょう。 プログラムを実行するという意味だと、何となくプロセスが起動しているようですね。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

>「休止」命令と休止期間はコマンドプロンプトでコマンドでも入力するのですか? > JAVAの話とは違うのでしょうか?どのようなコマンドを入力するのですか? Javaなら Thread.sleep(期間); よね。 コマンドプロンプトがなぜでてきたのか不明だけど コマンドプロンプトにもsleepコマンドはあるわよ。

peiee
質問者

お礼

JAVAは実行まで、プログラムで制御できるのですか。ありがとうございました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

> スレッドは同時に複数の実行はできないそうですが、 どこの誰から聞いたものかしら? > 同時に複数の処理を行うと書かれています どこの誰から聞いたものかしら? > 実行とは開始という意味でしょうか? むしろ私が聞きたいくらいね 文章はそれを書いた人の表現だから 何を持ってそれを語ったかによって 意味がまったく異なってくるわ。 その文章の前後の内容・言った状況にもかかわってくるしね。 ピンポイントだけ書かれても それを言った人の言いたいことは判断するのが難しいわ。 > スレッドは同時に複数の実行はできないそうですが、 複数のスレッドが「同時」に「実行」されることは 問題なくできるわよ。 でもスレッドAとスレッドBが1つの処理の内部で わずかなずれなく「同時」に「開始」するのは無理ね。 a.start(); b.start(); としても、必ずaがわずかながら早く開始するわ。 誤差の範囲だとは思うけど。 > 同時に複数の処理を行うと書かれています この一文はさっぱり意味がわからないわね。 複数のスレッドが同時に動いていることを指すのかしら。 とりあえず想定できそうなことは書いてみたけど あなたの質問にピンポイントで回答するのは 今の情報だけでは無理だわ。

peiee
質問者

補足

回答ありがとうございます。文章を変えて質問していました。すいません。 「同時に複数のスレッドを実行することはできないため、1つのスレッドが実行している間は他のスレッドを実行できません。」 この文は、スレッドの状態の説明にありました。スレッドの状態には、「実行中」「実行可能」「休止」「終了」があること説明した後の文章なので、実行に誤差があるという意味だと思います。そう考えると実行は開始という意味かと思えます。 「スレッドは複数の処理を行うしくみである」とはスレッドの説明の最後に要点として書かれていました。 ところで、「実行可能」は実行できる状態であるが、他のスレッドが実行中のため、CPUの割り当てを待っている状態です。「休止」はスレッドのAPIで提供されているメソッドなどを使用して明示的に休止している状態ですと書かれていました。 スレッドの状態の「実行可能」と「休止」の違いが良く分かりません。「実行可能」はCPUの割り当てがどれくらいか、決まれば実行可能になるという意味でしょうか?「休止」はAPIが絡んでいますが、APIはスレッドの生成と管理を行うために提供されています。このように書かれていても、「実行可能」と「休止」の意味がぴんときません。他の表現で教えてもらえないでしょうか。お願いします。