• ベストアンサー

携帯のjavaでthreadを強制中断するには

携帯のjavaでthreadを強制中断するには javaの thread には stop() で強制的に処理を止めることができると思いますが、携帯(DoCoMo)のjava では stop() が使えないのでしょうか? 携帯で思考をしている thread が一定以上時間がかかってしまったなら、諦めて中断させたいのですが。 今は、stop()が使えないので、中断フラグを使って中断させていますが、複雑な思考のなかで、いろいろな所に中断フラグを監視しなければならず、たいへん面倒です。 なにかうまい方法をご存知ならご教授ください。

  • Java
  • 回答数1
  • ありがとう数5

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

携帯向け以外のjavaでも Thread.stop は非推奨になっています。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/misc/threadPrimitiveDeprecation.html キャンセル処理には interrupt を使うのが定石かと思います。面倒なことには変わり無いですが。 http://www.itarchitect.jp/technology_and_programming/-/10795-5.html http://www.itarchitect.jp/technology_and_programming/-/10795-6.html http://www.ibm.com/developerworks/jp/java/library/j-jtp05236/ 下記の本なども参考になるかと。 『Java並行処理プログラミング』 http://www.amazon.co.jp/dp/4797337206

moritan2
質問者

お礼

interruptを使う場合は、結局threadの側でまめに中断要求が来ているかどうかチェックしなければなりませんよね。うーむ、なかなかたいへんです。外部から強制的な中断ができたら、たいへん便利なのですが、それは基本的に無理なのでしょうか?

関連するQ&A

  • java スレッドの作り方

    はじめまして☆ 課題で、「あるディレクトリのデータファイル(テキストファイル)を定期監視し、ファイルがあれば読み取って出力するjavaプログラムを作成しなさい」と出されました。 そこで、定期時間に繰り返し監視しながら、ファイルがあれば処理するために、ファイル処理スレッドを作りたいのですがスレッドを作ったことが無く、まったくわかりません(>_<) 誰か教えてください!!

  • tomcat psコマンドでスレッドのプロセスが見れません。。

    はじめまして。 JDK1.4.2-13 + tomcat5.0.28 + RHEL3でWEBアプリ環境を 構築しています。 Linux上ではJavaの1スレッドが1プロセスとして 実行されていると思いますが、この1スレッドをpsコマンドが 見た時になぜか表示されません。tomcat本体のjavaプロセスは 確認できるのですがスレッドに当たるプロセスが見えません。 topコマンドでは処理させた時にjavaというプロセスが 処理に応じて上位に表示されるのですが、この時に、 ps -ef | grep java でJavaプロセスを確認しようとしてもどうしても 見ることができません。。 linux上でtopコマンドとpsコマンドでは表示されるプロセス に違いがあるのでしょうか? WEBで調べてみてもみなさんpsコマンドでtomcatのJavaスレッド プロセスが確認できているようなので質問させて頂きました。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 携帯アプリにおけるJava

    開いていただいてありがとうございます。 先日ようやく「月額XXX円」のような立派な携帯アプリ(ゲームですよ)を落としてみて驚いたのですが、とてもJavaで動作しているとは思えないような処理が大変多くてびっくりしました。さすがにDirectXなんかを使っているとは思いませんが、携帯専用で特殊な拡張機能があるのかどうか調べてみたのですが、どうにもよく分かりません。 自分は「Swingさえ使えてればJavaに限っては天下太平」な人間だったのですが、実際に動いている華麗な画面を見て少し気が変わりました。Java/GUIに関する知識が乏しいので(というかSwing以外にJava/GUIって何よ?な状態ですが……)どうにも検討がつかないのですが、「携帯で見劣りのしない動作をさせる」ことを目的とするのならば、どのような技術を用いればいいのでしょうか? ヒントほどで構いませんので、よろしければご教示お願いいたします。サンプルソースなどを公開している場所がありましたら、お知らせいただけるとありがたいです。 ※参考までにプレイしたゲーム(DoCoMo) ・DQ1/DQ2(あのDQフォントはわざわざ作成してるんだろうか……) ・スペクトラルフォースシリーズ

    • ベストアンサー
    • Java
  • Javaアプレットで描画の中断がしたい

    Java初心者です。学校の課題で数学シュミレーションの結果を Javaアプレットで表示するプログラムを作成しています。 この課題のJavaアプレットでは 複素平面のシュミレーション(計算結果を色のグラデーションで表示する)なのですが、 チョイスやボタン、マウスクリックなどによって、 初期条件や、描画方式、表示範囲などを指定することができます。 とりあえず、シュミレーション結果の描画は 試行錯誤の結果表示ができるようになりました。 paint(Graphics g)メソッドで数値計算、及び描画をしています。 (ちなみに余談かもしれませんがダブルバッファリングをしていて、 描画内容をImageとして書き込んでおいて描画するというかたちです。) 「計算途中(計算には結構時間がかかる)に 新たにボタンなどで指定条件が変更された場合、 現在の描画を中断して次の計算と描画を開始できるように プログラムを改良しなさい」というのが今回の課題です。 つまり、「プログラム的にはpaintメソッドが実行されている途中に 特定のイベントが発生したらpaintメソッドを中断し、 もういちど呼びなおしなさい」ということかと思われます。 スレッドを作り、そのスレッドを中断するなども考えました。 インターネットで検索もしてみましたが、 なかなか情報を見つけられず困っています。 学生が作るプログラムなのでそんなに難しいことではないのだと思うのですが 解決できませんでした。 どうぞよろしくお願いします。

  • 重たい処理のタイムアウト強制終了

    ある重たい処理(正確には重くなる可能性がある処理)があります。たとえば、あるクラスAにあるpublic void method()がそれに該当するとします。 このメソッドを実行したいのですが、ある一定の時間が経過したら、タイムアウトとして、強制的に終了させたいという要望があります。 スレッドを使えば良いのかなとは思いました。しかし、ネットでスレッド関連の情報を検索しても、呼び出されるmethodのなかでループして、終了フラグを参照する類のサンプルばかりでした。ところが、クラスAは他者が提供したモジュールであるため、勝手に変更することが出来ません。 なにか良い方法はありますでしょうか?

    • ベストアンサー
    • Java
  • Javaのマルチスレッド処理(スレッド数の上限)

    Tomcatを使用したWebアプリを作成しているのですがある処理を マルチスレッドで行う予定でいます。 画面でチェックボックスが100個チェックされたら100個スレッドを作成して それぞれのスレッドが通信を行うイメージです。 ここで以下の疑問があります。 1.一度に作成できるスレッドの数はTomcatがインストールされているOSに依存するのでしょうか。 2.もし100個が上限として101個スレッドを作成した場合、どうなるのでしょうか。 3.100個が上限とした場合、この数は一定でしょうか。何か別の全く関係のない重い処理が   実行されていてCPUに負荷がかかっていたりすると上限が10個になるということはあるので   しょうか。 4.一度に作成できるスレッドが100個とした場合、Tomcatが下記4人のリクエストを同時に処理   したらエラーという認識でよいでしょうか。それとも4人それぞれが100個ずつ(計400個)   スレッドを作成できるということでしょうか。   Aさん・・・30個のチェックボックスをONにして実行   Bさん・・・30個のチェックボックスをONにして実行    Cさん・・・30個のチェックボックスをONにして実行   Dさん・・・30個のチェックボックスをONにして実行 5.また、Javaプログラムで現時点で作成可能なスレッド数を取得することは可能でしょうか。

  • 通信の中断 doja 3.0

    HttpConnection のconnectでサーバと通信する際に、なかなかつながらないときはユーザー操作で通信をキャンセルできるようにもくろんでいます。 浮かぶ方法としては、 #1 通信用のクラスでRunnableを実装 #2 通信時にこのスレッドを生成 #3 中止のキーイベントで、スレッドを強制終了 だったのですが、stop(), suspend() はJ2SEでも推奨されていないせいか、コンパイルでシンボルエラーをくらってしまいます。 他のアプリで通信中断をしているアプリも見かけたことがあるのですが、あれはどうやっているんでしょうか。 アドバイスをお願いします。

    • ベストアンサー
    • Java
  • Java:スレッドでエラー発生時に処理を終わらせる

    以下の事が出来ずに悩んでいます。 これ参考になるかな? というようなWEBページ等がありましたら、教えていただけると助かります。 ■やりたいこと ・aaa.javaから、「スレッド1」「スレッド2」「スレッド3」の処理を呼び出し、それぞれのスレッドで処理を実行する。 ・全てのスレッド処理が完了したら、次の処理へ進む。 ・「スレッド1、2、3」で、何かしらのエラーが発生した場合は、「aaa.java」の処理を終わらせる。 ■現状 ・aaa.javaから、「スレッド1、2、3」の処理を呼び出し、それぞれ処理を実行させる事は出来た。 ・すべてのスレッドが完了したら次の処理へ進む事は出来た。 ・「スレッド1、2、3」のどこかでエラーが発生した場合でも、処理の完了となり、「次の処理」へ進んでしまう。 もうちょっと細かい事を書くと、各スレッドでは、それぞれデータ作成のSQLを実行する処理をさせているのですが、 そのSQLが何かしらの要因でエラーで戻ってきた場合、次の処理へ進んでしまうとまずいです。 そのため、どこかのスレッドのSQLがエラーになったら、スレッドを呼び出した元の「aaa.java」でエラー・終了。となるようにしたいです。 一応、各スレッドでSQLのエラーとなった場合には「catch」に飛んでる。状態ではあるのですが、aaa.java側に戻って終わらせる事が出来ず。。。 ソースはだいぶ削りましたが、参考に以下記載します。 (削りすぎている可能性もありますが、その際はごめんなさい。) すみませんが、よろしくお願いします。 ---------------------------------------- aaa.java   public void Sql_Exec() throws SQLException, IOException {     /*     ループ条件の取得。(省略)     */     //ループ処理。     for (ループ条件(省略)) {       //スレッドの呼び出し。       //スレッド1       Thread_1 exec_1 = new Thread_1(引数もろもろ);       Thread thr_1 = new Thread(exec_1);       thr_1.start();       //スレッド2       Thread_2 exec_2 = new Thread_2(引数もろもろ);       Thread thr_2 = new Thread(exec_2);       thr_2.start();       //スレッド3       Thread_3 exec_3 = new Thread_3(引数もろもろ);       Thread thr_3 = new Thread(exec_3);       thr_3.start();       try {         //全てのスレッドが終わるまで待つ。         thr_1.join();         thr_2.join();         thr_3.join();       } catch (InterruptedException e) {         //例外処理         e.printStackTrace();       }     }   } ---------------------------------------- スレッド1~3.java public class Thread_1 extends Thread{   public void run(){     /*     ループ条件の取得。(省略)     */          //ループ処理。     for (ループ条件(省略)) {       try (Connection con1 = DB接続。) {         String sql1 = 実行SQL取得;         PreparedStatement pstmt1 = con1.prepareStatement(sql1);         int aaa = pstmt1.executeUpdate();         con1.close();       } catch (SQLException | IOException | JAXBException e) {         e.printStackTrace();         throw new RuntimeException("例外!");       }     }   } } ----------------------------------------

    • ベストアンサー
    • Java
  • WaitForSinbleObjectについて

    こんにちは。 現在VC++6.0でスレッドを用いたプログラムを行っています。 GUIでSTARTボタンを押すと、ワーカースレッドが起動し特定量の処理を開始します。(例えば100件のファイルコピーなど) 100件の処理が完了したらワーカースレッドは終了する。 GUIでSTOPボタンを押したときにフラグを立てて、ワーカースレッド内でそのフラグが立っていたら処理を抜けてスレッドを終了させることもできるようにしたいと考えています。 このワーカースレッドの終了のことで疑問があります。 STOPボタンを押してフラグを立てたあとにWaitForSingleObjectでスレッドの終了を待とうと思っていますが、このSTOPボタンを押したタイミングと、100件のファイルコピーが終わりワーカースレッドが自分で終了するタイミングとがかぶってしまった場合、WaitForSingleObjectで待ちに入った時点で、すでにスレッドが終了してしまっている場合が起こりうるのではないかと考えているのですが、実際にどうなのでしょうか? WaitForSingleObject実行時にすでにスレッドが破棄されていた場合、WaitForSingleObjectはどういう値を返すのでしょうか? 事前にスレッド(スレッドのハンドル)が生きているかどうかを調べる方法はあるのでしょうか? ご存知の方教えてください。 わかりづらい説明で申し訳ありません。

  • 携帯向けのアプリ制作について

    携帯でのアプリはすべてJavaで出来ていると聞きました。 これは、パソコンで作成したJavaプログラムをそのまま携帯に移したら動作するのでしょうか? それとも、容量を削ったりなどめんどうなことをしなくてはいけないのでしょうか? また、携帯でのアプリでOnlineRPGを作成することって可能ですか?

    • ベストアンサー
    • Java

専門家に質問してみよう