在多线程编程中使用静态类方法

时间:2013-01-23 12:15:15

标签: java multithreading thread-safety static-methods static-members

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

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

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

1 个答案:

答案 0 :(得分:2)

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

在我看来,你使用静态作为公用事业,不需要任何超出自己参数的东西;所以你应该安全:)