私はベクトルを含むシングルトンロガーを持っています。外部からのオブジェクトは、singletonLogger.append(String data)を呼び出してこのベクトルに情報を追加し、文字列を返すsingletonLogger.getLogEntries()を呼び出してベクトル全体を読み取ることができます。 getLogEntriesメソッドをint型パラメータでオーバーロードするとよいでしょう。 getLogEntries(int x)、ログ全体ではなく最後のxエントリのみを取得できるようにします。スレッドセーフな状態でベクトルの最後のXエントリを読み取る方法は?
mutlipleスレッドに関するなければ、これは、のようなものは簡単だろう:
String getLogEntries(int x) {
int size = vector.size();
for(int i = size; i > (size - x); i--) {
// StringBuilder.append(vector.elementAt....
}
}
しかし、アカウントに複数のスレッドを取ったときに、もちろん、これは本当に安全ではありません。上記の方法でサイズが決定された直後に別の方法でベクターがクリアされたとすると、ループはクラッシュします。
一方、ループ処理が5〜10秒続く可能性があるため、私はこのメソッド全体を同期としてマークしたくありません。これは、ロガーのメソッドを呼び出そうとしているすべてのコードをブロックするでしょうか?
ベクトルの最後のx要素を確実に得る別の方法はありますか?
おかげ
ベクターを同期させるだけですか? – Jivings
Uh。 'Vector'クラスはすでに定義されています。 – Gray