java.lang.ClassCastException:创建一个同步的链表(java.lang.C

2019-10-18 19:52发布

我想用一个通用类,这里的相关部分同步的LinkedList:

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

而对于B,这里的“真正的” B接口,将是一个supclass

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

Answer 1:

使用Collections.synchronizedList()方法来代替。 该方法返回一个List<T> 因此,请在类型上LHS的List ,以避免类型转换:

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


Answer 2:

在的话, 号上是LinkedList的线程安全的,当我与报价和调查访问独占它? :

链表不是线程安全的。 你必须做自己锁定。

尝试的ConcurrentLinkedQueue或LinkedBlockingDeque ,而不是它是否符合您的需要

或尝试从这个代码的Piyush哈日的答案 :

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


文章来源: java.lang.ClassCastException: Creating a synchronized Linked List