表題のようなことをやるたいのですが、例えば下記URLには定期的に実行するコードが書かれていますが、1日中1ヶ月以上実行し続けさせたい場合(ある種のサーバにしたい)、下記URLのような手法で大丈夫でしょうか?
Linuxならcronで動かすと思うのですが、そちらの方がベターでしょうか?
またWindowsで動かしたい場合は、どうすべきでしょうか?
http://www.atmarkit.co.jp/fjava/javatips/078java008.html
下記URLのような手法で大丈夫でしょうか?
大丈夫といえば大丈夫ですが、Java仮想マシンを走り続けるためにリソースを浪費することになります。
お気づきのように、cronを使ってスケジューリングはOSに任せるのが定石です。
Windowsでしたらタスク・スケジューラを使います。
これでどうでしょう。
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分たちました。");
}
}
java で組むとしたら、そのプロセスはずーっと動いてなきゃいけない。
実行し続ける処理の内容にもよるけれど、予期せぬ例外 (例えば、OutOfMemoryError) が出るとプロセスが止まってしまうので、それ以降、一度も実行されなくなってしまう。
たとえ、エラーで正しく実行できなかった時間帯があっても、それ以降の動作を期待したいなら cron を使った方が良いと思う。
Windows なら、at コマンドで、というのは、No.1 の回答の通り。
1分に一度実行、だと、登録が激しく面倒なのだけれど。
下記URLのような手法で大丈夫でしょうか?
大丈夫といえば大丈夫ですが、Java仮想マシンを走り続けるためにリソースを浪費することになります。
お気づきのように、cronを使ってスケジューリングはOSに任せるのが定石です。
Windowsでしたらタスク・スケジューラを使います。
コメント(2件)
schtasks が後継コマンドでしょうか。
schtasksやタスク・スケジューラは不可なので
5分おき等の用途にはあまり向いていないです