- ベストアンサー
Threadのrun()メソッドについて
Threadのrun()メソッドについて質問です。 run()メソッドは処理が完了すると自然消滅しますか?
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- Thread処理について、教えてください!
はじめまして、いきなりですが質問させて頂きます。 sleep()メソッドは、Threadクラスのクラスメソッドであるため、 Thread.sleep();と書けば、main()メソッドの処理を一時停止できると 書いていました。 sleep();と書けば、Threadのrun()メソッドが一時停止するのはわかりますが、なぜ、sleep();にThread.を付けたらmain()メソッドが停止するのかわかりません。 なぜなのか、簡単に教えてください。
- ベストアンサー
- Java
- Threadのinterruptメソッドについて
javaの勉強をしているんですが、Threadのinterruptメソッドの説明が「そのスレッドがwaitで待機している場合は、それを再開してwaitにInterrupException をスローさせる」と説明が書いてあるのですが、意味が理解できません。 スローさせるスレッドは待機状態であったスレッドを指し例外がスローされて、catch文に処理が移るのでしょうか? 初心者なので分かりやすく説明をお願い致します。
- 締切済み
- Java
- 310-035の参考書の中にあるThreadとRunnableの説明
310-035の試験を1か月程勉強中です。スレッドについて頭がゴチャゴチャになってしまいました。 スレッドのインスタンス化ですが、 Threadを継承した場合は単純に Thread t = new Thread() でよいが、 Runnableを実装した場合は、 1行目// MyRunnable r = new MyRunnable(); 2行目// Thread t = new Thread(r) とする。とあります。 説明として、「Runnableの場合はスレッド自身のrun()メソッドではなく独自に定義したrun()メソッドを使用するようにするため」とあるのですが、何をいわんとしてるのか、この説明の意味がわからないのです。。 「スレッド自身のrun()メソッド」「独自に定義したrun()メソッド」って何のことを指してるんでしょうか。 「Threadを継承した場合」はオーバーライドしているので「スレッド自身のrun()メソッド」を見てるってことでしょうか。?? それと、どうしてRunnableの場合は、Threadをextendしてないのに急に2行目のところでThread が現われるんでしょうか。 アドバイスを頂けると助かります。宜しくお願いします。
- ベストアンサー
- Java
- Threadクラスのメソッドの使用方法について
Threadクラスのメソッドの使用方法について質問させていただきます。 Thread th = currentThread(); System.out.println("Thread Name = " + th.getName() ); というコーディングにおいて、Thread th = currentThread();は、 currentThreadメソッドがstaticなのでnewしないで使用しているのは分かるのですが、 th.getName()は、staticでないのに、newせずに使用できるのがなぜか分かりません。 どなたか宜しくご教示お願い致します。
- ベストアンサー
- Java
- スレッドについての質問です。
下記のロジックを見ていただきたいのです。 スレッドがnullの間はrunが動いています。 問題は一番下に記載した"stopplay()"というメソッドだと思われます、スレッドを停止して直ぐにまた動かしていますがどうもスレッドが二つ動いている様子です。なぜでしょうか? ************************************************** //最初にスレッドを開始します。 public init(){ play(); } ************************************************** //スレッドのON OFF public void threadOnOff(boolean sw) { if(sw == true){ thread =new Thread(this); thread.start(); } else { thread = null; } } ************************************************** //スレッド開始 public void play(){ threadOnOff(true); } ************************************************** //スレッド停止 public void stop(){ threadOnOff(false); } ************************************************** //runメソッド public void run(){ String mode = ""; while(thread != null){ try { thread.sleep(500); //0.5秒間隔で動きます。 mode = modeRequest(); if(mode.startsWith("STOP") == true) { //スレッド停止 threadOnOff(false); } } catch (InterruptedException ie) {} } } ************************************************** //問題のメソッドです。 public void stopplay(){ stop(); play(); }
- ベストアンサー
- Java
- Thread.Abortメソッド後の処理について
Thread.abortメソッドについて分からないことがあったので,助言が頂けると嬉しいです. Thread.Abort () を発生させると,通常そこでスレッドが終了するということなので,その後のスレッド内の処理はスルーされると思っていたのですが,下記コードですとその後の pictureBox1.Image = null;も実行されている様です. mainでスレッド作成→threadAの停止になると考えていたのですが,delegate内では反映されないのでしょうか? Thread thread_a; //スレッド delegate void Del(); private void main(object sender, EventArgs e) { //スレッドを開始 thread_a = new Thread(new ThreadStart(threadA)); thread_a.Start(); } private void threadA() { new Thread(new ThreadStart(delegate { Invoke((Del)delegate { thread_a.Abort(); //画像を消去する pictureBox1.Image = null; }); })).Start(); }
- ベストアンサー
- C・C++・C#
- スレッド
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つの処理を同時に処理するためと覚えてください」 と切り捨てられてしまいました。 これは正しいでしょうか・・・? 記述の足りない部分は補足いたします。 ご指摘お願いします。
- ベストアンサー
- Java
- synchronized メソッド について
http://www.stackasterisk.jp/tech/java/sjcp05_15.jsp ↑の問題の解答で ”あるスレッドが「9行目~11行目、15行目~19行目」までの処理を実行している間に、 「23行目~25行目」の処理を他のスレッドが実行することはありえるのです。” とあるのですが removeObj1メソッドとremoveObj2メソッドは synchronizedメソッドだと思うので removeObj1メソッドとremoveObj2メソッドが 同時に実行される事はないと思ったのですが synchronizedメソッドないにsynchronizedブロックが あるとブロック単位でのロックになるのでしょうか? addObj1が実行されているときに removeObj2が実行されるのはわかるのですが、 ”ArrayListのremove( )メソッドを呼ぶときに IndexOutOgBoundsExceptionが発生する可能性があるので 答えはC, Dになります。 と言うのがどうもわかりません。” 宜しくお願いします。
- ベストアンサー
- Java
- javaのwaitしてるスレッドをnotifyで起こすことが出来ない
JDK1.5 WindowsXPです。 現在マルチスレッドを試しています。 A、B、C三つのスレッドがあります。 AはBというスレッドを作るメインスレッドです。 Bは、waitするスレッドです。 public final void run(){ while (true){ try { //notifyが来るまで待機 waitForNotify(); //実際の処理 act(); //スレッド停止させるための割り込み例外 } catch (InterruptedException e) { Thread.currentThread().interrupt(); e.printStackTrace(); } //割り込み受信の場合強制終了する if (Thread.currentThread().isInterrupted()) { break; } } } こんな感じです。 そしてCのスレッドがnotify()を実行します。 しかしnotify()を実行してもスレッドは起きません。 Bに、 public synchronized void notifyM() throws InterruptedException{ wait(); } のようなメソッドを追加して、スレッドのインスタンスメソッドとして実行しても起きません。 notify()がJavaDOCなどを読んでも意味不明なため、 どのような使い方なら動くのか見当がつきませんので質問しました。 notify(スレッドB)みたいなら分かりいいんですが。
- ベストアンサー
- Java
- C# スレッドでフォームを扱う
スレッドとフォームの連携について質問があります。 「開始」ボタンをクリックしたら、 「開始」ボタンのEnableをfalseにして 他のクラスのスレッドで処理を開始します (中断ボタンが押されたら処理をやめるためにスレッド採用) この時、処理が終わったら「開始」ボタンのEnableをtrueに戻したいのです。 デリゲートのコールメソッドを使ったところ、フォームを生成したスレッド以外からフォームををいじってはいけないというエラーがでてしまいました。 [a]ユーザー操作を待ち受けるフォームのスレッド [b]処理系のスレッド このようなスレッドの構成の時、[a]が[b]の処理が終わったことを知り、buttonのプロパティを変更するためには、どうすればよいでしょうか?
- ベストアンサー
- C・C++・C#
お礼
スレッドです。自然に消滅するということなので安心しました。 ありがとうございます。 この質問は締め切らせて頂きます。