私は良い方法で望みます:-) 私はこのコードを書いています。 私がやりたいことは、 "キャッシュ"のようなものを構築することです。 多くの呼び出しがそのクラスに到達するのと同じように、私は別のスレッドを監視しなければならないと思ったので、私はThreadLocal機能を試しました。 VECTOR.FieldName =「X」セットで VECTOR.FieldValue =「Y」 非常に多くのベクトルオブジェクト: 基本パターンは が ベクトルのようなものを保持している「VECTORの多くのセット」を持っています。異なるマシン、ユーザー、オブジェクトからの異なる呼び出しに対して異なるセット。スレッディング、配列、およびキャッシュメモリについて質問する
private static CacheVector instance = null;
private static SortedSet<SplittingVector> s = null;
private static TreeSet<SplittingVector> t = null;
private static ThreadLocal<SortedSet<SplittingVector>> setOfVectors = new ThreadLocal<SortedSet<SplittingVector>>();
private static class MyComparator implements Comparator<SplittingVector> {
public int compare(SplittingVector a, SplittingVector b) {
return 1;
}
// No need to override equals.
}
private CacheVector() {
}
public static SortedSet<SplittingVector> getInstance(SplittingVector vector) {
if (instance == null) {
instance = new CacheVector();
//TreeSet<SplittingVector>
t = new TreeSet<SplittingVector>(new MyComparator());
t.add(vector);
s = Collections.synchronizedSortedSet(t);//Sort the set of vectors
CacheVector.assign(s);
} else {
//TreeSet<SplittingVector> t = new TreeSet<SplittingVector>();
t.add(vector);
s = Collections.synchronizedSortedSet(t);//Sort the set of vectors
CacheVector.assign(s);
}
return CacheVector.setOfVectors.get();
}
public SortedSet<SplittingVector> retrieve() throws Exception {
SortedSet<SplittingVector> set = setOfVectors.get();
if (set == null) {
throw new Exception("SET IS EMPTY");
}
return set;
}
private static void assign(SortedSet<SplittingVector> nSet) {
CacheVector.setOfVectors.set(nSet);
}
だから...私は添付でそれを持っていると私はこのようにそれを使用します。
CachedVector cache = CachedVector.getInstance(bufferedline);
素敵な部分は:Bufferedlineは、データファイルからいくつかの区切り文字に基づいて分割さラインです。ファイルのサイズは任意です。
このコードはどのように表示されますか?私は心配すべきですか? このメッセージのサイズをお詫び申し上げます!
あなたのシングルトンはスレッドセーフではありません。 –
'101010'ボタンを使用してコードスニペットをフォーマットしてください – khachik
' ThreadLocal'の使用は推奨されません(「効果的なJava 2nd ...」を参照)。 –