私はマルチスレッドソケットサーバーアプリケーションを持っています。私の必要条件は、並列スレッドを実行することによって今のX minごとにテーブルを更新することです。期間(分)はXMLファイルに保存されます。並列実行スレッドはヒープメモリ上で余りに多くの領域を占めており、最終的にOutOfMemoryErrorが発生します。 以下は更新のコードです。はXMLでJavaで設定可能なタイマータスクを作成する必要があります
public class MyThread extends Thread
{
public void run()
{
while(true)
{
int TOmin=0;
int timeout=0;
try {
TOmin=Integer.parseInt(DatabaseManager.getSMSTimeout().trim()); //the method reads from a XML file.
timeout=TOmin*60*1000;
Thread.sleep(timeout);
DataManager.callstoredprocedure();
} catch (NumberFormatException e) {
e.printStackTrace();
LogManager.logException(Arrays.toString(e.getStackTrace()));
} catch (InterruptedException e) {
e.printStackTrace();
LogManager.logException(Arrays.toString(e.getStackTrace()));
}
}
}
}
私はScheduled Executor Serviceに見えたが、XMLファイルから遅延prametersを設定することができませんでし。メモリにリークを引き起こさずにタスクを実行する方法を提案してください。
EDIT-1 - スプリングコアを使用するのはオプションではなく、スレッドのみで動作させる必要があります。助言がありますか。春のコアと使用と
は、おそらくあなたは、データベース内の行の多くを持っており、一度にメモリにそれらすべてを読み取ろうと管理が困難になりません。行ごとに試してみるか、ストリームを使って試してみてください。 – abbath
Quartz Schedulerを使ってみましたか:http://www.quartz-scheduler.org/? –
@abbathいいえ、そうではありません。上位1行だけが更新されます。 –