1

我想要一个带有通用类 A 的同步 LinkedList,这里是相关部分:

public abstract class A<T extends B> implements Runnable {

B的接口,“真正的”B,将是一个超类

public interface B{

以下设置将引发运行时错误:

LinkedList<A<? extends B>> eopList = (LinkedList<A<? extends B>>) Collections
            .synchronizedCollection(new LinkedList<A<? extends B>>());

我找到了以下建议,但它也不会编译:

LinkedList<A<? extends B>> eopList = (LinkedList) Collections
            .synchronizedCollection(new LinkedList<A<? extends B>>());

这是日志:

Exception in thread "main" java.lang.ClassCastException: java.util.Collections$SynchronizedCollection cannot be cast to java.util.LinkedList
4

2 回答 2

6

改用Collections.synchronizedList()方法。该方法返回一个List<T>. 因此,将 LHS 上的类型设为List,以避免类型转换:

List<A<? extends B>> eopList = Collections.synchronizedList(new LinkedList<A<? extends B>>());
于 2013-10-22T06:22:19.360 回答
1

用nos的话来说,当我通过 offer 和 poll 专门访问 LinkedList 时,它是线程安全的吗?

LinkedList 不是线程安全的。您必须自己进行锁定。

如果适合您的需要,请尝试使用ConcurrentLinkedQueueLinkedBlockingDeque

或从Piyush Hari回答中尝试此代码:

  LinkedList<A<? extends B>> eopList = (LinkedList)Collections.synchronizedList(new LinkedList<A<? extends B>());
于 2013-10-22T06:36:21.700 回答