ThreadPoolExecutor выдает исключение RejectedExecutionException после завершения работы

У меня есть две кнопки для начала загрузки и остановки загрузки. Я использовал ThreadPoolExecutor для нескольких загрузок. Я выключаю ThreadPoolExecutor при нажатии кнопки остановки. И я снова запускаю выполнение ThreadPoolExecutor при нажатии кнопки запуска. У меня RejectedExecutionException. Я хотел бы знать, как повторно выполнить ThreadPoolExecutor, который уже закрылся.

EDIT: стек ошибок.

11-18 10:41:52.929: E/AndroidRuntime(27351): FATAL EXCEPTION: main
11-18 10:41:52.929: E/AndroidRuntime(27351): java.util.concurrent.RejectedExecutionException: Task com.task.SyncTask@42614978 rejected from java.util.concurrent.ThreadPoolExecutor@414ce138[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 181]
11-18 10:41:52.929: E/AndroidRuntime(27351):    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1979)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:786)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1307)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at com.MainActivity$2.handleMessage(MainActivity.java:394)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at android.os.Looper.loop(Looper.java:213)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at android.app.ActivityThread.main(ActivityThread.java:5092)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at java.lang.reflect.Method.invokeNative(Native Method)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at java.lang.reflect.Method.invoke(Method.java:511)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
11-18 10:41:52.929: E/AndroidRuntime(27351):    at dalvik.system.NativeStart.main(Native Method)

Спасибо.


person user1156041    schedule 18.11.2013    source источник


Ответы (1)


Согласно документам, после завершения работы "новые задачи приниматься не будут".

Вам не нужно явно отключать исполнителя (он позаботится об этом сам, как только все потоки в нем будут выполнены).

Есть ли сообщение в RejectedExecutionException, которое вы получаете?

person Buddy    schedule 18.11.2013
comment
Мне нужно остановить все потоки очереди, если нажата кнопка остановки. - person user1156041; 18.11.2013
comment
Можно вызвать прерывание() для потоков... или сделать то, что вы делаете сейчас, и создать новый ThreadPoolExecutor, когда вы хотите запустить новые. - person Buddy; 18.11.2013
comment
да, я думаю, что создание нового лучше. - person user1156041; 18.11.2013