Thread th;
//スレッド変数th宣言
public void start()
{th = new Thread(); th.start();}
//スレッドの開始
run(){Thread me = Thread.currentThread();
while(th == me){動作変数の処理}
paint(){画像表示}
以上のような処理なのですが、
よく意味がわかりません。
特にwhile文の部分です。
currentThread とは?と聴いたところ
「現在実行中のスレッド」
だと言われました。
変数meに現在動作中のスレッドを代入する。
??よく事情がわからないのです。
このプログラムはdrawOvalで丸を描いて、それを移動させると言うものなのですが、スレッドは2つ動いてると言うのです。動作変数処理と表示処理の2つだそうです。
で、meが動作、thが表示だと言うのですが正しいですか?まず通常動作するスレッドとth.start()で動くスレッドで、2つということはわかります。
で、現在実行中のスレッドと実行させたスレッドが等しい(trueまたはfalse)だと言うことが何を意味しているのか・・・????なのです・・・
これはどういうことなのでしょうか??
質問してもまだ良くわからなそうなかおをしていたところ
「2つの処理を同時に処理するためと覚えてください」
と切り捨てられてしまいました。
これは正しいでしょうか・・・?
記述の足りない部分は補足いたします。
ご指摘お願いします。
No.2ベストアンサー
- 回答日時:
このページの
「Thread.stop が推奨されないのはなぜですか」
をまず読もう。
次に、同ページの
「Thread.stop の代わりに何を使うべきですか」
を読むと、「推奨されないrun()メソッドの書き方(※でもわかりやすい)」と「推奨される書き方(※パッと見、わかりにくい)」の2つが書いてある。
で、この「推奨される書き方」、なんでこんなヘンチクリンなコードなのかというと、
その答えはココに書いてある。
http://sunsite.tus.ac.jp/java/javaj/jtutorial/ap …
(「繰り返しタスクの実行にスレッドを使用する」の項)
ちなみに、azicyanさんに教えた人の説明とは、ちと異なってます(^^;
-------------
あと、その人の
「2つの処理を同時に処理するためと覚えてください」
という言葉の意味は、
「スレッドを使いたい場合は、(よくわからないかもしれないが、)とりあえずこう記述しといてくれ」
という意味だと思います。当面はそれでいいんじゃないかな、とぼくも思います。
(sunのチュートリアルにも「詳しいことはともかく、とりあえず覚えとけ」みたいなこと書いてある
http://java.sun.com/docs/books/tutorial/essentia …
この回答への補足
ありがとうございますーー
いろいろ本を探した結果、やっと見つかりました。
ずばり同じところにたどり着きましたよ(*^_^*)
>ちなみに、azicyanさんに教えた人の説明とは、ちと異なってます(^^;
ですね~。ちょっとへんでしたね。
>という意味だと思います
あはは。そうですね~。
でも、ほとんど決まりごとなのであながち悪い意見だとは思いませんが。
ありがとうございましたーーー
No.3
- 回答日時:
#1でちゃんと答えられなかったのでスレッドについて少し勉強してきました。
>while(th == me)
この判定がスレッドの停止条件のようです。
たとえばどこか別のタイミングでth = null;のようにすると、while(th == me)は偽となりループから抜けます。この場合はスレッドの破棄と停止が一緒にできるということになるのでしょう。
そのためにcurrentThreadで現在のthの参照を得といたのでしょう。
もう少しスレッドで遊んで勉強してきます。
この回答への補足
ありがとうございます。
>たとえばどこか別のタイミングでth = null;のようにすると、while(th == me)は偽となりループから抜けます。この場合はスレッドの破棄と停止が一緒にできるということになるのでしょう。
はい!
すっきりわかりやすいご説明だと思います。
ありがとうございました!
がんばります
stop()メソッドが推奨されないので、
その代わりとして、
スレッド変数にnullを代入して
代用するようです。
ありがとうございました
No.1
- 回答日時:
このようなスレッドの使い方もあるんですね。
質問のような書き方になじみがないのでどこまで答えられるかわかりませんが>meが動作、thが表示だと言うのですが正しいですか
は違うような気がします。
meはcurrentThreadの戻り値なのですから現在動作中のスレッドなんじゃないのでしょうか。
それがthと一致したら動作の処理をしているのでthが動作なのではないでしょうか。
>現在実行中のスレッドと実行させたスレッドが等しい
現在実行中のスレッド、つまりmeが、動作の処理用に新しく作ったスレッド、つまりthのときに、動作の処理をする、ということでしょうか。
できるだけ簡単に言うならば、thが実行中のときはwhileの中身を繰り返す、ということではないでしょうか。実行されるスレッドは他にもあるので。必ずme==thがtrueであるとは言えませんし。
>2つの処理を同時に処理するためと覚えてください
納得できたら覚えるべきだと思います。
参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
この回答への補足
回答ありがとうございます~
僕なりにもいろいろ調べまして、
2のかたの回答がずばり、のようです。
STOPメソッドは推奨されない、ではどうかくか・・・?
とリファレンスにもこのように書いてありました。
>は違うような気がします。
そうなんですよね。
ぼくもえ???と思いました。
meは、現在実行中のメソッドの参照変数なのに、
meがスレッド???へんだな、とおもいました。
>できるだけ簡単に言うならば、thが実行中のときはwhileの中身を繰り返す、ということではないでしょうか
結局はそれでいいようです。
僕もそう思いました。
ありがとうございましたーーー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- CPU・メモリ・マザーボード CPUについて 4 2022/07/09 13:41
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- BTOパソコン PCの選び方 6 2022/09/11 00:16
- 倫理・人権 酔っ払いが他人にたくさん迷惑を掛けているので、もっとお酒規制を厳しくした方が良いのでは? 2 2022/04/11 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
SwingUtilities.invokeLater(ne...
-
doGetとdoPostの違い
-
JAVA ID重複処理
-
Java ファイルが生成させたか確...
-
Javaプログラムからポップアッ...
-
JavaScriptからJAVAクラスを呼...
-
データ未入力時のエラー処理が...
-
onBlurとonFocusの処理順序につ...
-
Tomcatのスレッドを破棄する方法
-
JSPで「処理中」をブラウザに表示
-
jqueryのmouseenterイベントの...
-
Ajaxの実行速度と読み方について
-
チェックボックスの入力チェッ...
-
ラジオボタンの選択判定
-
複数リクエストの扱い
-
Androidアプリで本体の音量変更...
-
ブラウザを閉じた後のサーバ側...
-
PHPでDB処理中にプログレスバー...
-
Tomcat高負荷時の設定について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Tomcatのスレッドを破棄する方法
-
Javaプログラムからポップアッ...
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
WPF C#でF10のイベント取得方法...
-
PHPでDB処理中にプログレスバー...
-
素数判定を再帰処理で
-
Javaアプリケーション実行の返...
-
switch文の中に、throws new Ex...
-
doGetとdoPostの違い
-
JDBCでテーブルUPDATE後の再検...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
SwingUtilities.invokeLater(ne...
おすすめ情報