早上好, 假设我有6个不同的线程,我想同时与每个线程共享相同的数据。我可以创建一个类变量来存储要共享的数据,并使每个线程同时访问该内存,而不会降低性能,还是最好将数据的真实副本传递给每个线程? 非常感谢。
这完全取决于数据的性质: 如果数据是不可变的(或者可变但实际上你并没有对其进行改动),那么可以让所有线程都直接访问——很好 如果需要对数据进行修改,但是没有两个线程会依赖于其他线程修改的数据——很好 如果需要对数据进行修改,而且存在冲突,但是你能够合理地同步访问数据,使得不存在两个线程死锁等问题——很好,但不总是容易的 如果不能做出任何假设,那么真正的复制数据是最安全的方法,但在数据重复方面有最大的开销;如果数据很容易复制,那么这可能是可以接受的——事实上,可能会比同步更快 如果线程之间互相依赖,那么除了找出一种明智的锁定策略外,别无选择。再次强调:死锁是一个问题——以下是一些想法: 在获取锁时始终提供超时 如果需要锁定两个项,则尝试急切地锁定两个(而不是在开始时锁定一个,然后在进行大量更改之后锁定另一个)——然后你可以简单地释放并重新获取锁,而不必撤消更改或将更改恢复到特定状态