不在不同的线程中重新计算昂贵的数据
我有这样一种方法
public Object doSomethingExpensive(String x);
现在,如果我处理这个方法,我可以将结果保存在一个HashMap中,例如,键是字符串x,值是结果对象。
如果数据存在于此地图中,我就不必再次处理它。
但现在我几乎同时收到两个请求。在这种情况下,我想让第二个请求等待,直到第一个请求完成,第二个请求也可以在计算后得到第一个请求的结果,所以我不需要计算两次或并行两次。
关键是,我不能用
public synchronized Object doSomethingExpensive(String x);
因为Object是其他东西,如果字符串x是其他东西。所以我需要在字符串x上同步一些。
但是同步(X)是不可能的,因为java中的字符串...
另外,如果不是字符串,而是x的对象,那么我可能会在第二个请求中得到一个与request 1内容相同的类似对象,但它们都是其他对象。
所以我的问题是,如何解决这个问题,如何防止对字符串x的结果进行两次并行计算,如何同步它,并将结果缓存到HashMap中。
转载请注明出处:http://www.antanetwork.com/article/20230526/1078982.html