Javaで5分おきに定期的にある処理を1日じゅう実行し続けるには。

表題のようなことをやるたいのですが、例えば下記URLには定期的に実行するコードが書かれていますが、1日中1ヶ月以上実行し続けさせたい場合(ある種のサーバにしたい)、下記URLのような手法で大丈夫でしょうか?

Linuxならcronで動かすと思うのですが、そちらの方がベターでしょうか?
またWindowsで動かしたい場合は、どうすべきでしょうか?

http://www.atmarkit.co.jp/fjava/javatips/078java008.html

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/05/17 20:49:07
  • 終了:2011/05/18 21:31:14

ベストアンサー

id:Banias No.4

Banias回答回数237ベストアンサー獲得回数192011/05/17 22:31:28

ポイント22pt

下記URLのような手法で大丈夫でしょうか?

大丈夫といえば大丈夫ですが、Java仮想マシンを走り続けるためにリソースを浪費することになります。

お気づきのように、cronを使ってスケジューリングはOSに任せるのが定石です。


Windowsでしたらタスク・スケジューラを使います。

その他の回答(3件)

id:taroe No.1

taroe回答回数1099ベストアンサー獲得回数1322011/05/17 21:18:03

ポイント23pt

Windowsならatコマンドでスケジュール登録したほうがよいかと思います。

http://support.microsoft.com/kb/313565/ja

id:honmahideki No.2

honmahideki回答回数1ベストアンサー獲得回数02011/05/17 21:49:26

ポイント23pt

これでどうでしょう。

public class MainClass {

public static void main(String[] args) {

while(true) {

try{

Thread.sleep(10000);

SubClass subClass = new SubClass();

new Thread(subClass).start();

} catch(Exception e) {

e.printStackTrace();

}

}

}

}

class SubClass implements Runnable {

public void run() {

// 5分おきに実行したい処理

System.out.println("5分たちました。");

}

}

id:a-kuma3 No.3

a-kuma3回答回数4524ベストアンサー獲得回数18802011/05/17 21:57:05

ポイント22pt

java で組むとしたら、そのプロセスはずーっと動いてなきゃいけない。

実行し続ける処理の内容にもよるけれど、予期せぬ例外 (例えば、OutOfMemoryError) が出るとプロセスが止まってしまうので、それ以降、一度も実行されなくなってしまう。


たとえ、エラーで正しく実行できなかった時間帯があっても、それ以降の動作を期待したいなら cron を使った方が良いと思う。


Windows なら、at コマンドで、というのは、No.1 の回答の通り。

1分に一度実行、だと、登録が激しく面倒なのだけれど。

id:Banias No.4

Banias回答回数237ベストアンサー獲得回数192011/05/17 22:31:28ここでベストアンサー

ポイント22pt

下記URLのような手法で大丈夫でしょうか?

大丈夫といえば大丈夫ですが、Java仮想マシンを走り続けるためにリソースを浪費することになります。

お気づきのように、cronを使ってスケジューリングはOSに任せるのが定石です。


Windowsでしたらタスク・スケジューラを使います。

  • id:Mook
    at は 2000 くらいまでしかなかったような。
    schtasks が後継コマンドでしょうか。
  • id:godabin
    cronだと分設定をリストで指定できるけれど
    schtasksやタスク・スケジューラは不可なので
    5分おき等の用途にはあまり向いていないです

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません