3

我正在创建多个线程,所有线程都读取相同的属性文件(没有对属性文件进行写操作)。由于多个线程多次读取同一个属性文件,这会导致性能开销吗?

4

2 回答 2

5

我建议加载一次属性文件并由所有线程使用相同的属性实例。

加载一次减少磁盘访问:

  • 此应用程序的更好性能
  • 整个系统的更好的可用性

多读不是并发问题。

didierc的评论突出了一个可能的瓶颈:对 Properties 的每个访问都是同步的,因此当线程读取一个值时,其他所有可能都在等待。

为避免这种情况,您可以限制Properties在构造函数或线程初始化中的使用。不要在方法p.getProperty( XXX )内的循环中Thread.run()使用。

于 2012-11-09T17:12:51.317 回答
0

答案是“视情况而定”。除了读取属性文件之外,它主要取决于每个线程所做的工作量。如果每个线程除了读取文件之外还做很多工作,性能不会受到太大影响。

您应该更关心潜在的正确性问题:如果不同的线程使用不同的属性,程序会正确运行吗?否则,您的程序存在竞争风险错误:如果属性文件在程序运行时被更改(或删除),则某些线程可能使用不同的属性,从而产生不正确的计算。

属性文件用于程序配置。程序通常会在启动后不久读取所有配置信息,然后再进行任何实际工作。因此,如果配置错误,它们可能会很快失败。您可能应该这样做,将线程的产生视为稍后要做的真正工作。这还可以确保您的程序的用户在配置中的每个错误只收到一条错误消息,而不是每个线程一条消息。

于 2016-01-20T18:18:26.807 回答