DB
Size: a a a
DB
SK
DB
SK
DB
N
B
, результат которого зависит от двух A
. И B
, и А
должны быть мемоизированны при первом обращении, и должна быть гарантия что вычисление каждого из doHeavyLifting
методов происходит не более одного раза, вне зависимости от того, где и сколько раз их вызвали. При этом клиентская сторона может потенциально вызвать их в рандомном порядке и конкуррентно (сэмулированно в мэйне). Если раннать мэйн из гиста, он будет виснуть с некоторой вероятностью (если B пойдет вычисляться раньше чем обе A, будет дэдлок на ConcurrentHashMapе, даже если тред один).А
А
URL url = new URL("https://api.hitbtc.com/api/2/order?symbol=" + CURRENCY_PAIR + "&limit=50");
HttpURLConnection connection = getConnectionWithProperties(url, method);
А
command = "curl -X GET \"https://api.hitbtc.com/api/2/public/trades/BTCUSD?sort=DESC&by=timestamp&limit=100";
process = Runtime.getRuntime().exec(command);
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
String stream = output.readLine();
JSONArray ordersList = new JSONArray(stream);
А
command = "curl -X GET \"https://api.hitbtc.com/api/2/public/trades/BTCUSD?sort=DESC&by=timestamp&limit=100";
process = Runtime.getRuntime().exec(command);
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
String stream = output.readLine();
JSONArray ordersList = new JSONArray(stream);
А
А
SK
N
command = "curl -X GET \"https://api.hitbtc.com/api/2/public/trades/BTCUSD?sort=DESC&by=timestamp&limit=100";
process = Runtime.getRuntime().exec(command);
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
String stream = output.readLine();
JSONArray ordersList = new JSONArray(stream);
N
А
А
SK
N
AS
B
, результат которого зависит от двух A
. И B
, и А
должны быть мемоизированны при первом обращении, и должна быть гарантия что вычисление каждого из doHeavyLifting
методов происходит не более одного раза, вне зависимости от того, где и сколько раз их вызвали. При этом клиентская сторона может потенциально вызвать их в рандомном порядке и конкуррентно (сэмулированно в мэйне). Если раннать мэйн из гиста, он будет виснуть с некоторой вероятностью (если B пойдет вычисляться раньше чем обе A, будет дэдлок на ConcurrentHashMapе, даже если тред один).A a1 = new A(cache, 42);в случае двух A c одинаковым
A a2 = new A(cache, 42);
B b = new B(cache, a1, a2);
value
(как в примере 42) вычисление в А должно быть одно (уник. ключ 42) или два раза (уникальное на каждый объект A)?