• 締切済み

非スレッドでsleepのように処理を指定時間止めるクラス・メソッドありませんか?

現在、Struts、Servlet、Oracleの環境でDBロックの取得が出来なかった時に一定時間、間をおいて再度ロック取得を行いたいのですが、非スレッドでsleepメソッドのようなメソッド、クラスはありませんか? 教えて下さい。よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

みんなの回答

回答No.2

>非スレッドでsleepメソッドのようなメソッド、クラスはありませんか? Threadクラスを使わないでやりたいということですか? スレッドクラス以外でSleppと同等の機能は知りませんが (っていうか無意味 TimerTaskをドキュメントでしらべればよろしいかと思われます。 ただ、ひとつ気になったのだが・・・ どのようなロックをかけるつもりなんですかね? 事と次第によってはJavaでやるよりPL/SQLとかでやったほうがいい場合も・・・

rickgogo
質問者

お礼

返事が大変遅くなってしまい、失礼しました。 > Threadクラスを使わないでやりたいということですか? そうです。 用語が適切ではなく分かりにくい内容になってしまい、すみません。勉強不足でした。 現在、Webアプリケーションで tomcat Struts Servlet JSP Oracle 環境で 入力画面  ↓ DBロック(取得)  ↓ DB登録  ↓ DBロック解除  ↓ 画面に登録完了メッセージ表示 の処理を行おうと思っています。 DB登録の際、入力値にテーブルに登録してある 値+1 でシステムで一意の番号(4桁連番)を設定し登録するので、 1)DBロック    ↓ 2)テーブルに登録してある値をSELECTし   一意の値決定    ↓ 3)入力値登録    ↓ 4)ロック解除 の中の 1)でロック取得失敗のSQLExceptionをcatchした際に、間を置いてDBロックをretryさせたいと思っています。 > TimerTaskをドキュメントでしらべればよろしいかと思われます。 調べてみます。 ありがとうございます。

rickgogo
質問者

補足

ngsvx さん 3rate-engineer さん 私、思いっきり勘違いしていました。 Thread.Sleep ですね。 ありがとうございました。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

>非スレッドでsleepメソッドのようなメソッド、クラスはありませんか? どうしてThread.sleep()じゃダメなんでしょうか? また「非スレッドで」とありますが、これをどのような意味で使っているのかわかりません。 勘違いがあるのでは?

rickgogo
質問者

お礼

返事が大変遅くなってしまい、失礼しました。 また、質問に使用している用語が適切ではなく、分かりにくい内容になってしまい、すみません。勉強不足でした。 「非スレッド」とはThreadクラスを使用しないで実装したいという意味で書いています。javaの実行オブジェクトそれぞれが一つのスレッドと呼ぶのですね。勉強になりました。 java、Servletを始めたばかりでよく理解していない所があり申し訳ないのですが、Servlet(Struts環境)でThreadクラスを使用することは出来ると思うのですが、それは 入力画面 → DBロック(取得) → DB登録 → 画面に登録メッセージ表示 だけの処理では使用しないのかな?と思っています。

rickgogo
質問者

補足

ありがとうございます。 (抜けてました)

関連するQ&A

  • Thread処理について、教えてください!

    はじめまして、いきなりですが質問させて頂きます。 sleep()メソッドは、Threadクラスのクラスメソッドであるため、 Thread.sleep();と書けば、main()メソッドの処理を一時停止できると 書いていました。 sleep();と書けば、Threadのrun()メソッドが一時停止するのはわかりますが、なぜ、sleep();にThread.を付けたらmain()メソッドが停止するのかわかりません。 なぜなのか、簡単に教えてください。

    • ベストアンサー
    • Java
  • Thread.sleep()はすべてのスレッドを停止する?

    Threadを継承したCarというインスタンスを5つ作ってstart()させたとします。 そのあと、クラスメソッドのThread.sleep(1000)をすると、すべてのThreadインスタンスが1秒止まるのかと思ったのですが、そうではないといわれました。 クラスメソッドのThread.sleep()は何をsleepさせるのでしょうか?

    • ベストアンサー
    • Java
  • Threading.Thread.Sleep()の前後の処理

    初めて質問します。(VB2008始めたばかりの初心者です) 昔のBASICでwaitやdelay、sleepなどといったプログラムの実行を一時止めることの出来るコマンドがあったと思いますが、 VB2008上で同じようなことさせてラベルの色を一定時間で変化させたいと思い、色々調べて Threading.Thread.Sleep()  というものを見つけました。実際使ってみるとThreading.Thread.Sleep()の前に書いた処理がうまく動作しません。 (下記のような簡単なコードですが) Private Sub Buttonstart_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles Buttonstart.Click    Label1.BackColor = Color.White     Threading.Thread.Sleep(2000)     Label1.BackColor = Color.Blue End Sub スタートボタンを押せばlabel1が白色になり2秒後に青にしたいのですが白色にならずに2秒後にいきなり青になってしまいます。 とても初歩的な間違いをしていると思うのですが解決できません。恥ずかしいと思いながらも質問させていただきます。アドバイスをお願いします。

  • java Threadのsleepを途中で止める方

    今、訓練校に通っていて課題をだされていますが、どうもうまく行きませんのでお知恵を拝借したく思います。  java Threadのsleepを使用し、クイズの回答を10秒以内で答えるというものですが、 途中で入力をすると、次の問題の回答時間が異様に早くなり1秒ではなくなってしまいます。  こういう場合、入力をすれば、runメソッドが終わるというプログラムはどうやって書けばいいのか教えて頂きたく思います。 どうぞよろしくお願いいたします。 <下記、threadの部分だけですが、パッケージを使用するという課題のため無理やり使っています。> package pa; public class CountTest extends Thread { public void start() { super.start(); } public void run() { for (int i=10; i >= 1; i--) { try{ sleep(1000); System.out.print("⇒" ); }catch(InterruptedException e){} } System.out.println(""); for (int i=1; i >= 1; i--) { / } System.out.println("Time up "); System.out.println(""); System.out.println("1-4で答えを記入してください"); }

    • ベストアンサー
    • Java
  • メソッドの処理の同期化

    いつもお世話になっています。 メソッド処理の同期化についてなのですが、 いろいろ調べてみたのですが、いまいちうまく実行できません。 ソースを考えてみたのですが、どこがどう悪いのかご指摘お願いできますでしょうか? 以下のクラスがある場合で public void Add(){ synchronized(this){ System.out.println("待機しています!"); //おそらくここら辺にwait()/notify()処理が来るきがする //同期中に行わない処理をここに記載する? } System.out.println("Addメソッド実行しました"): } public void Change(){ synchronized(this) { //おそらくここら辺にwait()/notify()処理が来るきがする //同期中に行わない処理をここに記載する? //一時停止 処理時間をずらすためループを使用 try { for(int a=0;a<3;a++){ System.out.println("a="+a); Thread.sleep(10000); } }catch (InterruptedException e) { } System.out.println("Changeメソッド完了です"); } } このとき、Add対Change/Add対Addといった形で同期化処理をしたいのですが、どうしてもうまくできません。 仮にThreadを使用して実行してみようとしたのですが、 順番に実行されてしまいます。 したいのが、 1.Addメソッド実行 2・Addメソッド実行 この場合、現状だと a=0 a=0 a=1 a=1 a=2 a=2  と表示されてしまうので、 a=0 a=1 a=2 a=0 a=1 a=2  と表示することはできるのでしょうか? 原因として、wait()/notify()が記載されていないことが影響していると思うのですが。 宜しくお願いします。

  • JSPにてMySQLのBLOB型の画像の出力について

    いつもお世話になっております。 Java、Servlet、Strutsの学習のために、簡易的なSNSのようなサイトを作成している者です。 現在、画像の登録、表示の機能の作成をしているところで、画像データをDBにインサートするのは、FormFileクラスのgetFileDataメソッドを使って行うことができたのですが、インサートした画像をJSPにて表示させる方法がわかりません。 DBからbyte配列型の画像データを取得するところまでは出来ているのですが、それをどうやってJSP側に渡して、どうやって表示させればいいのでしょうか? スキル不足なのは承知の上なのですが、今後の作業のためにも避けて通れないところなので、参考になるサイトのURLだけでも教えていただければと思います。 どうか、宜しくお願い致します。 環境は以下の通りです。 ・WindowsXP ・JDK1.6 ・tomcat6 ・Struts1.3 ・Mysql5.1

    • ベストアンサー
    • Java
  • [C#]FormクラスのShowメソッドの挙動について

    C#のSystem.Windows.Forms.FormクラスのShowメソッドについて調べています。 Showメソッドを使うことで、モードレスでフォームを表示できます。 http://msdn2.microsoft.com/ja-jp/library/39wcs2dh.aspx 例えば、ボタンがクリックされたときに、モードレスでフォームを表示する場合は、以下のようになると思います。 // ボタンがクリックされたときにコールされるメソッド private void button1_Click(object sender, EventArgs e) { MyForm form = new MyForm(); // MyFormはFormの継承クラス form.Show(); } このとき、button1_Clickメソッドが終了しても、 つまり、変数formのスコープから処理が外れても、MyFormは表示され続けます。 別スレッドで表示しているのかと思いましたが、MyFormを表示してもスレッド数は変わりませんでした。 なぜ、変数formのスコープから処理が外れても、MyFormが表示され続けるのかわかりません。 どなたかご存知の方がいらっしゃいましたら、ご教授いただけると幸いです。 環境 : WindowsXP SP2, .NET Framework 2.0, Visual Studio 2005

  • C# で一定時間待機するのにCPUを消費しない方法

    C# で一定時間待機するのにSleepメソッドを使用しますが、 Sleepメソッド使用中はCPUを大量に消費します。 CPUを消費しない方法はあるのでしょうか? ただしクラス内でのコーディングとし、 フォーム内使用のTimerメソッドは使用しないとします。 (クラス内であればTimerメソッドは使用OKとします。)

  • Tomcatのサーブレット内のクラスのメソッドを利用してバッチ操作をしたい

    Tomcatのサーブレット内のクラスの メソッドを利用してDB操作のバッチ 処理をしたいと望んでいます。 単に、ソースを流用するだけでは、 バッチ実行時のJDBCドライバの 設定もさけられず、環境設定が 結構大変だと思っています。 出来るだけTomcat環境を利用したいと 望んでます。 作成手順、設定手順等参考になりそうな 文献、URLを紹介頂ければ幸です

  • (DIRECTX)一定時間間隔で特定のメソッドを呼び出す

    DirectX 9において入力を待つのではなく一定時間間隔で特定のメソッドを呼び出す(openGLで言えばglutTimerFunc関数のような)にはどのようにすれば良いのでしょうか。どなたか対処の方法ご存知の方教えていただけないでしょうか。 開発環境はVC++.net2003です。 よろしくお願いいたします。

専門家に質問してみよう