Java:使用Synchrozined集合的经验法则?

Ste*_*eve 2 java collections synchronize

我正在阅读关于使用StringBuilder与StringBuffer的Stackoverflow 线程.

底线似乎是两个集合,不同的是一个StringBuffer同步同样的事情,是线程安全的,确实有点少以及在性能上相比StringBuilder的不属于那些东西.

有人提到了ArrayList和Vector之间存在类似关系的方式.

除非我有意识地创建多个线程,否则不使用同步集合(或其他任何东西)是一个好的(安全的)经验法则吗?

换句话说,我收到消息"尽可能使用新的StringBuilder.",我想知道的是,我怎么能确定它是否可能?

我是否安全使用非同步集合,只要我不故意创建新线程?

Lou*_*man 5

使用不同步的东西,直到您确定需要同步.

例如StringBuffer,问题的一部分Vector是它们并不总是以正确的方式同步.因为Vector,并不总是需要让每个操作单独同步; 经常你真正想要的是同步操作块......对于这些操作块来说,它Vector不一定比ArrayList或者更好Collections.synchronizedList.

当你知道你正在使用并发和多线程,然后制定出你所需要的同步,只是交换的细节StringBufferStringBuilder只会给你一个虚假的感觉-即使你决定以后使用并发性,这不是一定是正确的那种并发.

(如果您目前没有使用线程,那么它的精美绝伦-甚至建议-寻找和替换StringBuffer,以StringBuilder上述论点是相反的方向.)