2015-04-04 90 views
1

我有一个类Helper与一个单一的方法int findBiggestNumber(int [] array)和没有实例变量。线程安全和方法参数

如果我制作一个对象Helper h = new Helper();并让10个不同的线程使用该对象的唯一方法findBiggestNumber来查找它们的数组的最大数量,它们是否会相互干扰? 我的恐惧是,例如,当findBiggestNumber中的参数正在引用例如线程8中的数组时,线程1开始计算其数组的最大数字。这可能发生在我的例子中吗?

+1

它们不会互相干扰,每个线程都会有自己的'array'变量 – 2015-04-04 00:40:38

+0

您是否对从此方法访问的任何字段进行分类? – kraskevich 2015-04-04 00:41:05

+1

方法范围内的变量就是这样。如果没有共享变量,那么它完全是线程安全的。 – 2015-04-04 00:41:10

回答

1

不存在您描述的问题不会发生。由于你的助手类没有成员,它是线程安全的。

线程安全问题在多线程之间共享可变(可变)数据时出现。然而在你的例子中,Helper并不包含任何数据(即变量),因为每个线程都将自己的数据(int []数组)传递给Helper的findBiggestNumber()方法,所以它将在多个线程之间共享。

0

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

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

+0

相同的数组不传递给多个线程。该数组也不会发生变异,它只是用来查找存储在其中的最大数字。 – 2015-04-04 01:09:39