这段代码来自《Effective》一书
Object[] snapshot = list.toArray();// Locks list internally我主要对这里的评论感兴趣。它会使列表成为unmodifiable吗?说一个列表被内部锁定是什么意思?这个锁有多长时间?有没有更好的方法将列表转换为数组?
发布于 2013-02-21 00:40:29
我可以想象,这意味着列表不会维护对返回数组的引用,这意味着可以修改数组,而不会影响原始列表。同样,对列表的任何修改都不会反映在数组中。
这在线程安全方面很重要,因为这意味着您可以从线程安全的角度对列表的内容进行迭代,而不必担心另一个线程会同时更改列表的sttae。从这个意义上说,列表的状态在返回的数组中是“锁定的”,无论之后对列表做了什么更改--您都可以看到它是一个快照。
toArray();不会改变列表的状态,所以它不会使列表不可修改或类似的东西。
发布于 2013-02-21 00:51:29
就像其他人说的,我认为这是关于并发性的:
文本来自java.uitl.List的javadoc
返回的数组将是“安全的”,因为此列表不维护对它的引用。(换句话说,该方法必须分配一个新的数组,即使该列表由一个数组支持)。因此调用者可以自由地修改返回的数组。
发布于 2013-02-21 00:44:33
它是关于线程安全的--从列表到数组的转换将是线程安全的
编辑:
以最简单的方式-您可以将其视为
Thread one正在转换列表时->数组在Thread one未完成转换之前,不允许其他线程更改列表
https://stackoverflow.com/questions/14985141
复制相似问题