RT
一般为了保证List的线程安全,会在初始化的时候使用Collections.synchronizedList方法,现在需要构造一个线程安全的LinkedList实例(必须是LinkedList,不能是List或者别的),使用如下代码编译能过,但运行时出错:LinkedList<String> list = (LinkedList<String>) Collections
.synchronizedList(new LinkedList<String>());报错内容:
“java.util.Collections$SynchronizedList cannot be cast to java.util.LinkedList”
也就是说无法类型转换,现在我使用下面的方法来构造一个LinkedList:LinkedList<String> list = new LinkedList<String>(Collections
.synchronizedList(new LinkedList<String>()));现在编译和运行都没问题了,请问现在的LinkedList还是线程安全的吗?
一般为了保证List的线程安全,会在初始化的时候使用Collections.synchronizedList方法,现在需要构造一个线程安全的LinkedList实例(必须是LinkedList,不能是List或者别的),使用如下代码编译能过,但运行时出错:LinkedList<String> list = (LinkedList<String>) Collections
.synchronizedList(new LinkedList<String>());报错内容:
“java.util.Collections$SynchronizedList cannot be cast to java.util.LinkedList”
也就是说无法类型转换,现在我使用下面的方法来构造一个LinkedList:LinkedList<String> list = new LinkedList<String>(Collections
.synchronizedList(new LinkedList<String>()));现在编译和运行都没问题了,请问现在的LinkedList还是线程安全的吗?
一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。
不过不推荐现在都面向接口编程,直接操作List就行,为啥非要是LinkedList?
只要底层是LinkedList实现,你管它是哪个类呢
List list = Collections.synchronizedList(new LinkedList());
.synchronizedList(new LinkedList<String>());
这样强转是肯定不行的,因为他返回的是一个内部类,实现了list的内部类,所以强转会报错。
第二个问题,返回的不是线程安全的,因为他是构造了一个新的LinkedList对象,唯一相同的就是内部元素的顺序是相同的,不能线程间同步