我正在构建一个使用两个类的webcrawler:一个下载器类和一个分析器类。由于我的程序设计,我有一些方法,我外包给一个名为utils
的静态类(找到链接后缀,确定我是否应该下载它给定一些变量,等等)。由于在某个时间有多个下载器和多个分析器,我想知道他们是否可以从utils
类中的某个静态方法得到错误的答案。
例如,假设分析人员需要知道链接后缀 - 它使用的是utils.getSuffix(link)
方法。同时,操作系统切换到某个下载程序线程,该线程还需要获取一些链接后缀并再次使用utils.getSuffix(link)
。现在操作系统切换回分析器线程,但没有得到正确的响应。
synchronized
类的每个方法中添加utils
吗?或者我应该在每个线程中使用相关方法来防止这种情况,即使我正在复制代码? 答案 0 :(得分:2)
这完全取决于方法的实现。如果方法仅使用局部变量并根据您给出的参数确定后缀,那么一切都很好。只要它需要任何可从另一个线程访问的资源(本地变量和参数不是),您就需要担心同步。
在我看来,你使用静态作为公用事业,不需要任何超出自己参数的东西;所以你应该安全:)