Java объединяет асинхронные и отдельные потоки, медленная производительностьJAVA

Программисты JAVA общаются здесь
Anonymous
Java объединяет асинхронные и отдельные потоки, медленная производительность

Сообщение Anonymous »

У меня есть следующая функция, которая возвращает список, который будет содержать имена аудиофайлов, как только они будут загружены: < /p>
List getAudios(List text)

Внутри его я использую метод разговора класса службы в простом для lop:
for (String s: text) {
futures.add(this.talkService.talk(s));
}

Метод разговора отправляет запрос на API Azure и делает две вещи:

[*] Получает SpeechSynthesEresult аудиодатики как Br/ol>
. Получение звука возвращает только Future , а не overseablefuture :
Future SpeakSsmlAsync(final String var1)

Поэтому мне нужно вызвать метод блокировки .get () , чтобы получить аудио. Чтобы компенсировать эту проблему, я раскручиваю новую параллельную нить, чтобы сделать это: < /p>
CompletableFuture talk(String text) {
CompletableFuture completableFuture = new CompletableFuture();
SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(config, null);

...
taskExecutor.execute(() -> {
...
Future result = speechSynthesizer.SpeakSsmlAsync(ssmlText);
SpeechSynthesisResult audioResult = result.get();

if (audioResult.getReason() == ResultReason.SynthesizingAudioCompleted) {
byte[] data = audioResult.getAudioData();
String filename = this.fileService.writeToFile(data, "mp3");
completableFuture.complete(filename);
}
});

return completableFuture;
}

Метод writetofile -это метод синхронизации, который использует файл fileOutputStream для записи данных Byte [] в файл.
мой контроллер вызывает действие , который объединяет все аудио файлы:


Подробнее здесь: https://stackoverflow.com/questions/794 ... erformance

Вернуться в «JAVA»