2

我正在构建一个使用两个类的网络爬虫:一个下载器类和一个分析器类。由于我对程序的设计,我将一些方法外包给了一个名为的静态类utils(查找链接后缀,确定是否应该在给定一些变量的情况下下载它,等等)。由于在某个时间有不止一个下载器和不止一个分析器,我想知道他们是否可以从utils类中的某些静态方法中得到错误的答案。

例如,假设分析器需要知道链接后缀——它正在使用utils.getSuffix(link)方法。同时操作系统切换到一些下载线程,该线程也需要获取一些链接后缀并再次使用utils.getSuffix(link). 现在操作系统切换回没有得到正确响应的分析器线程。

  1. 我对吗?
  2. 如果我是对的,我应该添加synchronizedutils类的每个方法中吗?或者我是否应该在每个线程中使用相关方法来防止这种情况,即使我正在复制代码?
4

1 回答 1

2

这完全取决于方法的实现。如果该方法仅使用局部变量并根据您给它的参数确定后缀,那么一切都很好。一旦它需要任何可以从另一个线程访问的资源(局部变量和参数不是),您就需要担心同步。

在我看来,您正在使用静态作为实用程序,不需要任何超出其自身参数的东西;所以你应该是安全的:)

于 2013-01-23T12:18:25.590 回答