线程和可变参数

Aym*_*mer 4 java multithreading thread-safety

我是Java的新手,所以请原谅如果回答以下简单案例是显而易见的.

class A{
   public void foo(Customer cust){
       cust.setName(cust.getFirstName() + " " + cust.getLastName());
       cust.setAddress(new Address("Rome"));
   }
}
Run Code Online (Sandbox Code Playgroud)

objectA为类创建了一个Singleton对象()A.

  1. 鉴于我没有任何类变量,如果我objectA.foo(new Customer())从不同的线程调用它是否是线程安全的?

  2. 如果我将foo更改为静态并A.foo(new Customer())从不同的线程调用该怎么办?它仍然是线程安全的吗?

Sot*_*lis 5

鉴于我没有任何类变量,如果我从不同的线程调用objectA.foo(new Customer()),它是否是线程安全的?

当然如此.您的foo()方法不会更改A对象的任何状态(因为它没有任何状态)和您传递的对象new Customer(),作为该方法的参数不可用于任何其他线程.

如果我将foo更改为static并从不同的线程调用A.foo(new Customer())怎么办?它仍然是线程安全的吗?

只要你没有任何可变的static状态,你仍然很好.