如何以有效的方式快速创建多个对象?

时间:2019-05-23 05:42:41

标签: java

我有一个与此类似的方法:

public boolean myMethod(MyObject object)
{
    return new MethodHook(object).getReturnValue();
}

我正在钩住此方法,并将MyObject值传递到钩子中,以便可以使用数据确定“ getReturnValue”将是什么。问题是我有多个线程(许多线程)一次调用此方法,并且在每次调用线程时都会创建新的MethodHook对象,因此很容易看到性能问题。

如何才能执行此确切操作(是的,我需要MethodHook对象)才能兼顾性能和线程安全? (我尝试了一个单例,但是没有成功,因为我意识到您不能在一个对象(单例)中存储不同线程使用的多个“ MyObject”)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用“ MethodHookPool”,例如:

public class MethodHookPool {
   private Stack<MethodHook> freeHooks;

   public boolean withFreeHook(MyObject object) {
      MethodHook hook;
      synchronized(freeHooks) {
         hook = freeHooks.isEmpty() ? new MethodHook() : freeHooks.pop(); 
      }

      try {
         hook.setMyObject(object);
         return hook.getReturnValue();
      }
      finally {
         synchronized(freeHooks) {
            freeHooks.push(hook);
         }
      }
   }
}

MethodHookPool pool;

public boolean myMethod(MyObject object) {
   return pool.withFreeHook(object);
}

但是我不确定这是否会提高性能。