我正在构建一个网络爬虫,它使用两个类:下载器类和分析器类。由于我对程序的设计,我将一些方法外包给名为 utils
的静态类(查找链接后缀,确定是否应该在给定一些变量的情况下下载它,等等)。由于在某一时间有多个下载器和多个分析器,我想知道他们是否可以从 utils 类中的某些静态方法得到错误的答案。
例如,假设分析器需要知道链接后缀 - 它使用 utils.getSuffix(link)
方法。与此同时,操作系统切换到某个下载器线程,该线程也需要获取一些链接后缀,并再次使用 utils.getSuffix(link)
。现在操作系统切换回分析器线程,该线程没有得到正确的响应。
- 我说得对吗?
- 如果我是对的,我应该将
synchronized
添加到utils
类上的每个方法吗?或者我应该在每个线程中使用相关方法来防止这种情况发生,即使我正在复制代码?
最佳答案
这完全取决于方法的实现。如果该方法仅使用局部变量并根据您提供的参数确定后缀,则一切正常。一旦它需要可从另一个线程访问的任何资源(局部变量和参数不是),您就需要担心同步问题。
在我看来,您正在使用静态作为实用程序,不需要其自身参数之外的任何内容;所以你应该是安全的:)
关于java - 在多线程编程中使用静态类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14479502/