我有我的批處理應用程序,其中我在批處理應用程序中使用了ThreadPoolExecutor。所以只要它擊中了我的批處理應用程序中的行,我總是會在我的批處理應用程序中出現下面的錯誤。而且我無法關閉我自己的Executor服務。任何人都可以建議我該如何克服這個錯誤。java.security.AccessControlException:訪問被拒絕(java.lang.RuntimePermission modifyThread)
Batch Execution Failed!
TaskResponse[exitCode=
<ExitCode
type="User"
code="30"
msg="Unexpected error encounted"/>,
causedByException=java.security.AccessControlException : Access denied (java.lang.RuntimePermission modifyThread)
]
java.security.AccessControlException: Access denied (java.lang.RuntimePermission modifyThread)
at java.security.AccessController.checkPermission(AccessController.java:108)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.util.concurrent.ThreadPoolExecutor.shutdown(ThreadPoolExecutor.java:1104)
at com.host.task.Testing.CommandExecutor.runNextCommand(CommandExecutor.java:185)
at com.host.task.Testing.PDSBatchTask.execute(PDSBatchTask.java:66)
at com.host.nel.batch.runtime.Task.start(Task.java:234)
at com.host.nel.batch.runtime.rt.TaskManager.__executeTask(TaskManager.java:138)
at com.host.nel.batch.runtime.rt.TaskManager.executeTask(TaskManager.java:73)
at com.host.nel.batch.runtime.rt.BatchManager.__executeTask(BatchManager.java:302)
at com.host.nel.batch.runtime.rt.BatchManager.executeBatchApplication(BatchManager.java:126)
at com.host.nel.batch.driver.BatchMain.main(BatchMain.java:95)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:599)
at com.host.nel.batch.testutils.TestBatchMain$1.run(TestBatchMain.java:50)
at java.security.AccessController.doPrivileged(AccessController.java:251)
at com.host.nel.batch.testutils.TestBatchMain.driver(TestBatchMain.java:37)
at com.host.nel.batch.testutils.TestBatchMain.driver(TestBatchMain.java:21)
at test.com.host.task.Testing.Driver.main(Driver.java:21)
更新 - 我試着這樣做的方式,但仍然沒有luck-
// create thread pool with given size
final ExecutorService service = Executors.newFixedThreadPool(10);
// queue some tasks
for(int i = 0; i < 3 * 10; i++) {
service.submit(new ThreadTask(i));
}
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// privileged code goes here, for example:
service.shutdown();
try {
if (!service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS)) {
service.shutdownNow();
}
} catch (final InterruptedException pCaught) {
service.shutdownNow();
Thread.currentThread().interrupt();
}
return null; // nothing to return
}
});
我有使用安全管理器,因爲我認爲構架自己的努力經營我的批量測試代碼。我如何授予我的代碼modifyThreadRunttimePermission? – ferhan