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

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

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

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

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

最佳答案

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

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

关于java - 在多线程编程中使用静态类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14479502/

相关文章:

java - hsqldb 内部事件日志配置

Java 时间戳 - 如何创建日期为 23/09/2007 的时间戳?

multithreading - 上下文切换中保存了什么?

java - 交换器 : JVM never stops

java - 如果 Swing 模型的 getter 不是线程安全的,您将如何处理它们?

java - 如何同时运行多个线程进行自动化 Selenium 测试?

java - Hibernate - 一张表中的三个实体

c++11 shared_ptr 在多线程中的使用

Javascript 线程处理和竞争条件

java - 在 ant 编译 javac 期间发出警告