1

我正在尝试对 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)
        }
    }
}

上面的源代码只类似于我正在做的事情,并且比原来的要简单得多。

是否有另一种我没有见过的 List 类型是线程安全的,或者是我不知道的另一种解决方案?

4

2 回答 2

3

只要访问和修改的唯一方法Test.list是通过Test.add(),您的代码就是线程安全的。

如果还有其他方法可以访问/修改Test.list,您需要告诉我们更多信息。

于 2013-01-19T13:51:21.967 回答
0

可以看到synchronizedList方法。

返回由指定列表支持的同步(线程安全)列表。为了保证串行访问,对后备列表的所有访问都通过返回的列表完成是至关重要的。

于 2013-01-19T13:51:42.160 回答