Что должен делать код: [list] [*]выполнять Bot#run синхронно. [/list]Что нужно исправить: [list] [*]совместное использование ресурса ([code]Bot.responseData or.. more[/code]) между другими ботами и потоками. [/list] Этапы выполнения Bot.run(): [list][*]http-запрос -> получить случайное значение с сервера (например, f8c3de3d-1fea-4d7c-a8b0-29f63c4c3454). [b](сервер всегда возвращает случайное значение!)[/b] [*]сохранить значение в Bot.responseData. [*]http-запрос (используйте Bot.responseData в качестве параметра) -> верните JSON. [*]сохраните JSON в Bot.statistics. [*] Cleanup Bot.responseData = null. [/list] [b]Субъект бота:[/b] [code]public class Bot { private final BotStatistic statisic = new BotStatistic(); private final Object mutex = new Object(); private String responseData;
private void cleanup() { this.responseData=null; } } [/code] [b]Субъект BotRunner:[/b] [code]public class BotRunner implements Runnable { private final Bot bot;
public BotRunner(Bot bot) { this.bot = bot; }
@Override public void run() { bot.run(); } } [/code] [b]Пытаемся выполнить следующим образом:[/b] [code]//init executor LocalDateTime termination = LocalDateTime.now().plusSeconds(5L); while (LocalDateTime.now().isBefore(termination)) { for (Bot bot : bots) { executor.execute(new BotRunner(bot)); } } //shutdown & close executor [/code] Что я вижу сейчас После выполнения я вижу [b]1–2%[/b] дубликатов Bot.responseData от РАЗНОГО бота. Вот такие дела: [code]thread-1 : start (Bot@44g35) thread-1 : f8c3de3d-1fea-4d7c-a8b0-29f63c4c3454 thread-2 : start (Bot@898g) thread-2 : f8c3de3d-1fea-4d7c-a8b0-29f63c4c3454 thread-1 : end thread-2 : end [/code] Что мне нужно увидеть [code]thread-1 : start (Bot@44g35) thread-1 : f8c3de3d-1fea-4d7c-a8b0-29f63c4c3454 thread-2 : start (Bot@898g) thread-2 : 018b2f19-e79e-7d6a-a56d-29feb6211b04 thread-1 : end thread-2 : end [/code] Я был бы очень признателен, если бы кто-нибудь мог мне помочь :)