你应该为每个线程创建一个新对象吗?

时间:2013-09-19 02:06:13

标签: java multithreading performance concurrency jvm

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

void handleRequest(Request r);

假设在线程之间重用单个RequestHandler对象没有并发问题。在为每个线程创建一个RequestHandler时,是否会有任何性能优势?或者在线程之间重用单个RequestHandler(每个都保持对同一RequestHandler的引用)更好?

编辑:响应杰克的回答 - 是的,我们假设handleRequest方法完全是线程安全的,不包含任何同步块或对象。

1 个答案:

答案 0 :(得分:4)

如果handleRequest(Request r)的实现是完全线程安全的并且它不包含任何同步块或对象,那么我认为单个共享对象与分离对象相比没有任何好处/劣势。

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

每个线程都可以通过遵循其代码路径独立地进入方法,这对于多个对象是相同的,但是你会有不同的this引用(除非方法是static)。现在,如果代码是线程安全的,那么除非调用其他线程安全的方法,否则几乎不会通过隐式this引用完成任何操作,因此它是等效的。