传递给函数的列表是否可以由Java中的另一个线程修改?

前端之家收集整理的这篇文章主要介绍了传递给函数的列表是否可以由Java中的另一个线程修改?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Integer getElement( List<Integer> list ) {

   int i = Random.getInt( list.size() );

   return list.get( i );

}

问题:虽然这个函数是从一个线程调用的,但有一种方法传递给这个函数的列表可以被另一个线程修改吗?

解决方法

java.util.List不保证线程安全.列表可以在list.size()和list.get()之间由另一个线程更改.此外,内存不一致也是一个问题.

我可以想到三种解决方法

>使用不可变列表. Collections.unmodifiableList(列表)很好,Guava的ImmuntableList更好.
> Synchronized清单.但是你必须在整个程序中同步列表实例.
>在java.util.concurrent中列出.这是一个复杂的并发解决方案.

猜你在找的Java相关文章