不在不同的线程中重新计算昂贵的数据

我有这样一种方法

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