【发布时间】:2013-10-09 16:33:46
【问题描述】:
我目前正在学习 java 中的线程,从我所读到的内容来看,实现它们并不是问题,而是让您的代码线程安全。这让我想到了一个问题:我是否应该尽可能使用不可变对象来确保防止并发错误?
我读过关于何时使用可变对象的不同意见,包括:
If immutable objects are good, why do people keep creating mutable objects? (Programmers.SE)
对于大型和/或复杂的对象,为每次更改创建对象的新副本可能会非常昂贵和/或乏味。对于具有不同身份的对象,更改现有对象比创建新的修改副本要简单和直观得多。
Immutable Objects(Java 教程)
对象创建的影响通常被高估,并且可以通过与不可变对象相关的一些效率来抵消。其中包括由于垃圾收集而减少的开销,以及消除保护可变对象免受损坏所需的代码。
那么,在实现线程时是否有最佳实践?我应该尽可能尝试使用不可变对象吗?
【问题讨论】:
-
是的,但是线程安全仍然很难。请参阅我的博客,blog.slaks.net/2013-07-22/thread-safe-data-structures
-
不幸的是,这个问题主要是基于意见的,当然取决于您的应用程序的具体情况。有时您想使用不可变对象,而有时这是不可能的。
-
你相信自己吗?还有谁会在代码中胡闹?
标签: java multithreading thread-safety