【问题标题】:Should you create a new object for each thread?你应该为每个线程创建一个新对象吗?
【发布时间】:2013-09-23 23:27:06
【问题描述】:

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

void handleRequest(Request r);

假设在线程之间重用单个 RequestHandler 对象没有并发问题。每个线程创建一个 RequestHandler 会有任何性能优势吗?还是在线程之间重用单个 RequestHandler 更好(每个都维护对同一个 RequestHandler 的引用)?

编辑:作为对 Jack 的回答——是的,我们假设 handleRequest 方法是完全线程安全的,并且不包含任何同步块或对象。

【问题讨论】:

    标签: java multithreading performance concurrency jvm


    【解决方案1】:

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

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

    每个线程都可以按照它的代码路径独立进入方法,这对于多个对象来说是一样的,但是你会有不同的this引用(除非方法是static)。现在,如果代码是线程安全的,那么通过隐式 this 引用几乎不会做任何事情,除非调用其他线程安全方法,所以它是等效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 2014-12-10
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多