cronのようなジョブを使用してデータセットを更新するアプリケーションがあります。更新プロセスは1分に1回行われ、長くは続きません。サーブレットは、このデータセットをユーザーに公開します。私の問題は、更新プロセス中に、サーブレットリクエストがブロックされ、プロセスが完了するのを待つ必要があることです。
結論として、私には次の2つの機能があります。
private void updateData() {
}
public List getData() {
}
最初の関数は1分に1回実行されます。2つ目は、同時に何度でも呼び出すことができます。updateDataが実行されると、getDataのすべての呼び出しはそれが完了するのを待つ必要があります。1回のgetData呼び出しで、同じ関数の後続の呼び出しをブロックしないでください。updateData関数は、getDataよりも優先度が高くなります。つまり、updateDataを実行する場合、getDataのすべての呼び出しが完了するまで待機する必要がありますが、新しい呼び出しの開始は許可されません。
このような場合、どの同期メカニズムを使用する必要がありますか?私はJavaサーバーを使用していますが、他のプラットフォームにもどのようなソリューションが存在するのか知りたいと思います。