LinkedListに非常に特殊な並べ替えを行おうとしています。ListIteratorを使用して、アイテムを追加したい場所を見つけます。これは静かに機能します。唯一の問題は、アイテムを追加およびソートしたい複数のスレッドがあることです。追加自体は同期されますが、LinkedListは不揮発性プロパティを使用します。それは安全ではありませんね?これが私がやろうとしていることです(簡略化):
public class Test {
private LinkedList<Long> list = new LinkedList<Long>();
synchronized void add ( final long number ) {
// iterate our sorting list
final ListIterator<Long> iterator = list.listIterator( list.size() );
while (iterator.hasPrevious()) {
long current = iterator.previous();
if (current < number) {
if (iteratot.nextIndex() >= list.size()) {
list.add( number ); // I don't need the iterator anymore
} else {
iterator.next();
iterator.add( number );
}
}
// This here gets difficult
// I need the current number here! (which is the one that is a little lower than the added one)
}
}
}
上記のソースは、私が行っていることに似ているだけで、元のソースよりもはるかに単純です。
スレッドセーフな、または私が知らない別の解決策である、私が見たことがない別のリストタイプはありますか?