我在我的tomcat服务器上获得此异常(+ liferay)
java.util.concurrent.RejectedExecutionException
Run Code Online (Sandbox Code Playgroud)
我的课就是这样的:
public class SingleExecutor extends ThreadPoolExecutor {
public SingleExecutor(){
super(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}
@Override
public void execute(Runnable command) {
if(command instanceof AccessLogInsert){
AccessLogInsert ali = (AccessLogInsert)command;
ali.setConn(conn);
ali.setPs(ps);
}
super.execute(command);
}
}
Run Code Online (Sandbox Code Playgroud)
我在行上遇到此异常super.execute(command);
当队列已满但LinkedBlockingQueue大小为2 ^ 31时,可能会发生此错误,我确信没有这么多命令等待.
一开始一切都很稳定,但在重新部署战争之后它就开始了.这个类不是战争的一部分,而是在tomcat/lib的jar中.
你知道为什么会发生这种情况以及如何解决这个问题吗?
我正在开发一款社交游戏,主要运行Android NDK中的本机代码.该游戏有3个主要的ndk pthreads:
除此之外,在java方面,我们正在使用AdWhirl,它通过自己的方式生成自己的线程ScheduledExecutorService,但我们用try-catch块将每个调用包装到"schedule","submit","post","start"等.抓住了RejectedExecutionException.但是,RejectedExecutionException我们提交的每个新版本都会出现这种情况.
来自Android Market的堆栈跟踪几乎没有给我留下任何线索,我们的质量保证部门也发现难以确定问题,因为它在测试期间几乎不会发生(只有我们的用户报告崩溃).它仅影响我们用户的一小部分但仍然每周超过7,000次崩溃(小部分与大量安装基础相比)
java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1876)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:774)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1295)
at android.os.AsyncTask.execute(AsyncTask.java:394)
at c.onProgressUpdate(Unknown Source)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4632)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
java.util.concurrent.RejectedExecutionException: pool=128/128, queue=10/10
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1961)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:794)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1315)
at android.os.AsyncTask.execute(AsyncTask.java:394)
at c.onProgressUpdate(Unknown Source)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native …Run Code Online (Sandbox Code Playgroud) 我们有一个大文本文件,其中每一行都需要密集的process. 设计是让 aclass读取文件并将每一行的处理委托给 a thread, via thread pool。一旦池中没有空闲线程来进行处理,就应该阻止文件读取器类读取下一行。所以我需要一个blocking thread pool
在当前的实现ThreadPoolExecutor.submit()和ThreadPoolExecutor.execute()方法中RejectedExecutionException,在配置的线程数变得忙碌之后抛出异常,如下面的代码片段所示。
public class BlockingTp {
public static void main(String[] args) {
BlockingQueue blockingQueue = new ArrayBlockingQueue(3);
ThreadPoolExecutor executorService=
new ThreadPoolExecutor(1, 3, 30, TimeUnit.SECONDS, blockingQueue);
int Jobs = 10;
System.out.println("Starting application with " + Jobs + " jobs");
for (int i = 1; i <= Jobs; i++)
try {
executorService.submit(new WorkerThread(i));
System.out.println("job added " + (i));
} catch …Run Code Online (Sandbox Code Playgroud)