title: java.security.AccessControlException : Access denied (java.lang.RuntimePermission modifyThread)
body: <p>I have my Batch Application Program, in which I am using ThreadPoolExecutor in my Batch Application Program. So as soon as it hits the-</p>
  
  <pre><code>executorService.shutdown();
  </code></pre>
  
  <p>line in my Batch Application program, I always get this below error in my Batch Application Program. And I am not able to ShutDown my own Executor Service. Can anyone suggest me how should I overcome this error.</p>
  
  <pre><code>Batch Execution Failed!
  TaskResponse[exitCode=
     &lt;ExitCode 
         type="User"
         code="30"
         msg="Unexpected error encounted"/&gt;,
      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)
  </code></pre>
  
  <p><strong>Update-</strong>
  I tried doing this way, but still no luck-</p>
  
  <pre><code>// create thread pool with given size
              final ExecutorService service = Executors.newFixedThreadPool(10); 
  
              // queue some tasks
              for(int i = 0; i &lt; 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
                  }
              });
  </code></pre>