我有一个与此类似的方法:
public boolean myMethod(MyObject object)
{
return new MethodHook(object).getReturnValue();
}
我正在钩住此方法,并将MyObject值传递到钩子中,以便可以使用数据确定“ getReturnValue”将是什么。问题是我有多个线程(许多线程)一次调用此方法,并且在每次调用线程时都会创建新的MethodHook对象,因此很容易看到性能问题。
如何才能执行此确切操作(是的,我需要MethodHook对象)才能兼顾性能和线程安全? (我尝试了一个单例,但是没有成功,因为我意识到您不能在一个对象(单例)中存储不同线程使用的多个“ MyObject”)
答案 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);
}
但是我不确定这是否会提高性能。