相关疑难解决方法(0)

可能是RejectedExecutionException的原因

我在我的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中.

你知道为什么会发生这种情况以及如何解决这个问题吗?

java multithreading

62
推荐指数
2
解决办法
6万
查看次数

将任务提交给线程池会产生RejectedExecutionException

我正在开发一款社交游戏,主要运行Android NDK中的本机代码.该游戏有3个主要的ndk pthreads:

  1. 一个游戏线程
  2. 服务器通信线程
  3. 主渲染线程(通过Renderer.onRender调用)

除此之外,在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)

multithreading android android-ndk

17
推荐指数
2
解决办法
2万
查看次数

如何实现阻塞线程池执行器?

我们有一个大文本文件,其中每一行都需要密集的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)

java multithreading threadpoolexecutor

2
推荐指数
1
解决办法
3860
查看次数