Java 是否应该为每个线程创建一个新对象?

Java 是否应该为每个线程创建一个新对象?,java,multithreading,performance,concurrency,jvm,Java,Multithreading,Performance,Concurrency,Jvm,假设我正在运行一个多线程程序,一个服务器,它在不同的线程中处理传入的请求(每个请求一个)。我有一个RequestHandler对象,它可以用一个方法处理单个请求 void handleRequest(Request r); 假设在线程之间重用单个RequestHandler对象不存在并发问题。为每个线程创建一个RequestHandler会有任何性能优势吗?或者在线程之间重用单个RequestHandler(每个线程都维护对同一RequestHandler的引用)更好吗 编辑:根据Jack的回

假设我正在运行一个多线程程序,一个服务器,它在不同的线程中处理传入的请求(每个请求一个)。我有一个RequestHandler对象,它可以用一个方法处理单个请求

void handleRequest(Request r);
假设在线程之间重用单个RequestHandler对象不存在并发问题。为每个线程创建一个RequestHandler会有任何性能优势吗?或者在线程之间重用单个RequestHandler(每个线程都维护对同一RequestHandler的引用)更好吗


编辑:根据Jack的回答-是的,我们假设HandlerRequest方法是完全线程安全的,不包含任何同步块或对象。

如果执行
HandlerRequest(请求r)
是完全线程安全的,并且它不包含任何同步块或对象。因此,与单独的对象相比,我看不到使用单个共享对象的任何好处/缺点

这意味着实现
handleRequest
的对象当然没有任何可变状态


每个线程都可以通过遵循其代码路径独立地进入该方法,这对于多个对象来说是相同的,但是您会有不同的
this
引用(除非该方法是
static
)。现在,如果代码是线程安全的,那么通过隐式
this
引用几乎什么也做不了,除非调用其他线程安全方法,因此它是等效的。

如果
handleRequest(请求r)的实现
是完全线程安全的,并且它不包含任何同步块或对象。因此,与单独的对象相比,我看不到使用单个共享对象的任何好处/缺点

这意味着实现
handleRequest
的对象当然没有任何可变状态

每个线程都可以通过遵循其代码路径独立地进入该方法,这对于多个对象来说是相同的,但是您会有不同的
this
引用(除非该方法是
static
)。现在,如果代码是线程安全的,那么通过隐式
this
引用几乎什么也做不了,除非调用其他线程安全方法,因此它是等效的