线程安全和方法参数

Thread safety and method arguments

我有一个 class Helper,只有一个方法 int findBiggestNumber(int [] array),没有实例变量。

如果我创建一个对象 Helper h = new Helper(); 并让 10 个不同的线程使用该对象的唯一方法 findBiggestNumber 来查找数组的最大数,它们会相互干扰吗? 我担心的是,例如当 findBiggestNumber 中的参数引用线程 8 中的数组时,线程 1 开始计算其数组的最大数字。在我的示例中会发生这种情况吗?

不,你描述的问题不可能发生。由于您的 Helper class 没有成员,因此它是线程安全的。

当可变(可变)数据在多个线程之间共享时,会出现线程安全问题。但是在您的示例中,Helper 不包含任何将在多个线程之间共享的数据(即变量),因为每个线程都会将自己的数据(int[] 数组)传递到 Helper 的 findBiggestNumber() 方法中。

如果没有 findBiggestNumber 的实现,就不可能说它是否是线程安全的,因为您可能会改变作为参数传递的数组。如果是这样,并且您将同一个数组传递给多个线程,则可能存在竞争条件;否则,它是线程安全的。

findBiggestNumber 也可能正在修改全局或静态数据,这也会使其线程不安全。