- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Google Speech Client 将语音转换为文本,它工作正常,但当我尝试将其关闭时抛出异常。
这是我用来初始化的代码。
private val mSpeechClient by lazy {
applicationContext.resources.openRawResource(R.raw.credentials).use {
SpeechClient.create(SpeechSettings.newBuilder()
.setCredentialsProvider { GoogleCredentials.fromStream(it) }
.build())
}
}
但是当我调用
mSpeechClient.shutDown()
它抛出这个异常。
Process: com.google.cloud.examples.speechrecognition, PID: 10080
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@11065d8d rejected from java.util.concurrent.ScheduledThreadPoolExecutor@3cbffe24[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:298)
at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:503)
at java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:592)
at io.grpc.internal.SerializingExecutor.schedule(SerializingExecutor.java:93)
at io.grpc.internal.SerializingExecutor.execute(SerializingExecutor.java:86)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.closed(ClientCallImpl.java:594)
at io.grpc.internal.DelayedStream$DelayedStreamListener$4.run(DelayedStream.java:418)
at io.grpc.internal.DelayedStream$DelayedStreamListener.delayOrExecute(DelayedStream.java:372)
at io.grpc.internal.DelayedStream$DelayedStreamListener.closed(DelayedStream.java:415)
at io.grpc.internal.AbstractClientStream$TransportState.closeListener(AbstractClientStream.java:392)
at io.grpc.internal.AbstractClientStream$TransportState.access$300(AbstractClientStream.java:200)
at io.grpc.internal.AbstractClientStream$TransportState$1.run(AbstractClientStream.java:376)
at io.grpc.internal.AbstractClientStream$TransportState.deframerClosed(AbstractClientStream.java:245)
at io.grpc.internal.Http2ClientStreamTransportState.deframerClosed(Http2ClientStreamTransportState.java:31)
at io.grpc.okhttp.OkHttpClientStream$TransportState.deframerClosed(OkHttpClientStream.java:275)
at io.grpc.internal.MessageDeframer.close(MessageDeframer.java:233)
at io.grpc.internal.MessageDeframer.closeWhenComplete(MessageDeframer.java:195)
at io.grpc.internal.AbstractStream$TransportState.closeDeframer(AbstractStream.java:180)
at io.grpc.internal.AbstractClientStream$TransportState.transportReportStatus(AbstractClientStream.java:379)
at io.grpc.okhttp.OkHttpClientTransport.startGoAway(OkHttpClientTransport.java:739)
at io.grpc.okhttp.OkHttpClientTransport.access$1900(OkHttpClientTransport.java:92)
at io.grpc.okhttp.OkHttpClientTransport$ClientFrameHandler.run(OkHttpClientTransport.java:936)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
最佳答案
RejectedExecutionException
被抛出,因为新任务显然是在 ThreadExecutor
关闭后提交的。发生这种情况是由于 ThreadExecutor
中设置的默认处理程序策略 - ThreadPoolExecutor.AbortPolicy
。
- In the default
ThreadPoolExecutor.AbortPolicy
, the handler throws a runtimeRejectedExecutionException
upon rejection.
由于您正在手动关闭您的客户端 mSpeechClient.shutDown()
及其内部的 ThreadExecutor,为了解决您可能需要更改处理程序策略的问题到以下之一:
- In
ThreadPoolExecutor.CallerRunsPolicy
, the thread that invokes execute itself runs the task. This provides a simple feedback control mechanism that will slow down the rate that new tasks are submitted.- In
ThreadPoolExecutor.DiscardPolicy
, a task that cannot be executed is simply dropped.- In
ThreadPoolExecutor.DiscardOldestPolicy
, if the executor is not shut down, the task at the head of the work queue is dropped, and then execution is retried (which can fail again, causing this to be repeated.)
以上,是对引用自ThreadPoolExecutor的handler policies描述的解释Java文档。
为此,您需要使用您选择的策略设置创建 ThreadExecutor
的自定义实例,然后将其传递给您的客户端。这应该可以解决问题。
关于android - 关闭 SpeechClient 时出现 java.util.concurrent.RejectedExecutionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56754174/
在我们的一项服务中,有人添加了这样(简化)的一段代码: public class DeleteMe { public static void main(String[] args) {
下面是我的方法,其中我有单线程执行器在 run 方法中执行一些任务。 private void trigger(final Packet packet) { // this line is
是什么导致了此 RejectedExecutionException? [Running, pool size = 40, active threads = 3, queued tasks = 20,
为什么当来自线程池的线程之一抛出 RejectedExecutionException 时主线程没有停止?我在这里做错了吗?线程池中的第三个线程抛出 RejectedExecutionExceptio
除了先前在 Executor 上调用的 shutdown() 之外,是否还有其他原因导致 RejectedExecutionException 被抛出(我使用的是 singleThreadExecut
谁能给我提供一个获得 RejectedExecutionException 的例子可能是一个现实生活中的例子。提前致谢。 最佳答案 Anybody able to provide me with an
间歇性头痛需要帮助。代码调用 com.google.api.client.http.HttpRequest#executeAsync() 基本上具有以下逻辑, @Beta public Fut
我正在开发一款在 Android NDK 中运行大部分原生代码的社交游戏。游戏有 3 个主要的 ndk pthreads: 一个游戏线程 服务器通信线程 主渲染线程(通过 Renderer.onRen
我在我的 tomcat 服务器 (+liferay) 上遇到此异常 java.util.concurrent.RejectedExecutionException 我的课是这样的: public cl
我想实现以下行为: 从文件中读取 n 个事件 在线程中处理它们 如果仍有任何事件,请返回步骤 1 我编写了以下应用程序来测试解决方案,但它在随机时刻失败,例如。 java.lang.IllegalSt
我正在使用 AsyncTask 从远程服务器获取大量缩略图并在 GridView 中显示它们。问题是,我的 GridView 一次显示 20 个缩略图,因此创建 20 个 AsyncTasks 并启动
我正在用 java 编写一个多线程程序。我写过这样的东西 exec.execute(p) // where p is a runnable task working on an array prin
我正在从远程服务器获取大量缩略图,并使用 AsyncTask 在 GridView 中显示它们。问题是,我的 GridView 一次显示 20 个缩略图,因此创建 20 个 AsyncTask 并启动
我有这个客户: OkHttpClient okHttpClient = new OkHttpClient.Builder() .pingInterval(Duration.of
我正在尝试将行批量放入 HBase(0.90.0)中,大小约为 1000(行)我有多个生产者线程将数据写入队列,还有一个消费者线程每几分钟唤醒一次,并写入所有内容在队列中作为批处理到 HBase。但是
我希望atomicInteger的值为100,然后程序终止 public static void main(String[] args) throws InterruptedException {
我创建调度程序来测试处理 RejectedExecutionException: @Component public class TestScheduler { private final T
我正在尝试实现生产者-消费者模式,并且我希望能够阻止消费者。到目前为止我写道: import java.util.concurrent.BlockingQueue; import java.util.
我的代码基本上遵循官方教程,主要目的是收集一个订阅(Constants.UNFINISHEDSUBID)中的所有消息并在另一个订阅上重新发布它们。但目前我面临着一个我无法解决的问题。在我的实现中,调用
这是一个例子: // max 1 pending task in queue val queue = LinkedBlockingQueue(1) // max 1 thread / 1 active
我是一名优秀的程序员,十分优秀!