线程安全和方法参数

时间:2015-04-04 00:39:06

标签: java multithreading thread-safety

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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