【问题标题】:static method in multiple threads多线程中的静态方法
【发布时间】:2016-11-11 10:55:30
【问题描述】:

我有一个静态方法

public static void abc(String str) {
    // some code
    str = str + "s";
    // some code
}

假设这个方法被 100 个线程同时调用。

我认为 CPU 会调度所有这些线程来执行这个静态方法。

让我们扩大执行请求。现在,大约有 100000 个线程在同一时间调用此静态方法。

如果是这样,这将是性能开销(与此方法是类成员的情况相比)。我说的对吗?

【问题讨论】:

  • 上下文切换线程的成本将远远超过静态与非静态的任何差异。
  • 我不知道你在暗示什么。 what 对性能的影响究竟是什么?调用实例方法与调用静态方法有何不同?
  • @MarkoTopolnik 内存中只有一个类的静态方法实例。如果所有线程大约在同一时间调用此静态方法,则剩余线程可能需要等待时间。
  • 好的,那么你的问题来自基本的误解。 any 方法只有一个实例,任何数量的线程都可以随时执行它。只有锁会导致互斥。

标签: java multithreading static java-threads


【解决方案1】:
  • 理论上,静态调用可以稍微高效一些,因为它不需要进行虚函数查找,并且还可以避免隐藏的“this”参数的开销。
  • 实际上,许多编译器都会对此进行优化。
  • 上下文切换线程的成本将远远超过静态与非静态方法调用的任何差异

【讨论】:

    【解决方案2】:

    从操作系统调度程序的角度来看,方法是否是静态的并不重要。在机器级别,两者都只是带有一些参数的子程序。因此,除非这两种方法都没有同步,否则应该没有任何区别。

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多