我有一个类Helper
,只有一个方法int findBiggestNumber(int [] array)
,没有实例变量。
如果我创建一个对象Helper h = new Helper();
并让10个不同的线程使用该对象的唯一方法findBiggestNumber
来查找其数组的最大数字,它们会相互干扰吗?
我担心的是,例如,当findBiggestNumber
中的参数引用例如thread-8中的数组时,thread-1开始计算其数组的最大数。这可能发生在我的例子中吗?
答案 0 :(得分:1)
没有你描述的问题不可能发生。由于您的Helper类没有成员,因此它是线程安全的。
当多个线程之间共享可变(可更改)数据时,会出现线程安全问题。但是在您的示例中,Helper不包含将在多个线程之间共享的任何数据(即变量),因为每个线程都会将自己的数据(int []数组)传递给Helper的findBiggestNumber()方法。
答案 1 :(得分:0)
如果没有findBiggestNumber
的实现,就不可能说它是否是线程安全的,因为你可能会改变作为参数传递的数组。如果这是真的,并且您将相同的数组传递给多个线程,则可能存在竞争条件;否则,它是线程安全的。
findBiggestNumber
也可能正在修改全局或静态数据,这也会使其线程不安全。