From 525f1ff02d50050456a1bbf38fcca7cf5e8012eb Mon Sep 17 00:00:00 2001 From: wongtp <22502407+lifeopsgo@users.noreply.github.com> Date: Fri, 20 Jun 2025 13:33:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BC=83=E7=94=A8=20parallelStream=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E9=81=BF=E5=85=8D=E5=92=8C=E4=B8=9A=E5=8A=A1=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=AD=98=E5=9C=A8=E5=85=B1=E7=94=A8=20forkJoinPool=20?= =?UTF-8?q?=E7=9A=84=E5=8F=AF=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/github/whitemagic2014/tts/TTS.java | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/whitemagic2014/tts/TTS.java b/src/main/java/io/github/whitemagic2014/tts/TTS.java index 37f8437..11b1d49 100644 --- a/src/main/java/io/github/whitemagic2014/tts/TTS.java +++ b/src/main/java/io/github/whitemagic2014/tts/TTS.java @@ -3,6 +3,7 @@ import io.github.whitemagic2014.tts.bean.TransRecord; import io.github.whitemagic2014.tts.bean.Voice; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; import java.io.File; import java.net.URISyntaxException; @@ -17,6 +18,14 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import java.util.stream.Stream; public class TTS { @@ -66,6 +75,9 @@ public class TTS { */ private final Map websocketMap = new ConcurrentHashMap<>(); + + private ExecutorService executor; + public TTS(Voice voice) { this(voice, null); } @@ -171,8 +183,22 @@ public String trans() { public void batchTrans() { init(); - Stream stream = parallelThreadSize > 1 ? recordList.parallelStream() : recordList.stream(); - stream.forEach(record -> doTrans(record.getContent(), record.getFilename())); + if (parallelThreadSize > 1) { + List> futureList = new ArrayList<>(); + for (TransRecord record : recordList) { + Future future = executor.submit(() -> doTrans(record.getContent(), record.getFilename())); + futureList.add(future); + } + for (Future future : futureList) { + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + throw new IllegalStateException(e); + } + } + } else { + recordList.forEach(record -> doTrans(record.getContent(), record.getFilename())); + } } /** @@ -213,8 +239,11 @@ private void init() { if (!storageFolder.exists()) { storageFolder.mkdirs(); } - if (parallelThreadSize > 1) { - System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", String.valueOf(parallelThreadSize)); + if (executor == null && parallelThreadSize > 1) { + executor = new ThreadPoolExecutor(parallelThreadSize, parallelThreadSize, 0, TimeUnit.DAYS, + new LinkedBlockingQueue<>(parallelThreadSize), + new BasicThreadFactory.Builder().daemon(true).namingPattern("trans-worker-%d").build(), + new CallerRunsPolicy()); } } From 21b1330702c5689e0c35fd2611fca73cbdbcd245 Mon Sep 17 00:00:00 2001 From: wongtp <22502407+lifeopsgo@users.noreply.github.com> Date: Fri, 20 Jun 2025 13:35:46 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=BD=93=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=9C=80=E8=A6=81=E6=89=A7=E8=A1=8C=E6=97=B6?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/github/whitemagic2014/tts/TTS.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/io/github/whitemagic2014/tts/TTS.java b/src/main/java/io/github/whitemagic2014/tts/TTS.java index 11b1d49..e6defb9 100644 --- a/src/main/java/io/github/whitemagic2014/tts/TTS.java +++ b/src/main/java/io/github/whitemagic2014/tts/TTS.java @@ -25,8 +25,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; -import java.util.stream.Stream; public class TTS { @@ -240,7 +238,7 @@ private void init() { storageFolder.mkdirs(); } if (executor == null && parallelThreadSize > 1) { - executor = new ThreadPoolExecutor(parallelThreadSize, parallelThreadSize, 0, TimeUnit.DAYS, + executor = new ThreadPoolExecutor(0, parallelThreadSize, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(parallelThreadSize), new BasicThreadFactory.Builder().daemon(true).namingPattern("trans-worker-%d").build(), new CallerRunsPolicy());