Google App Engine で ExecutorService を使用すると例外が発生します。
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThread") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
私のコードは
ExecutorService service = Executors.newFixedThreadPool(25,com.google.appengine.api.ThreadManager.currentRequestThreadFactory());
List<Future<JSONObject>> results = service.invokeAll(jobs,45,TimeUnit.Seconds);
Thread.interrupt が原因でセキュリティ マネージャがトリガーされているようです。ドキュメントは少し不明確です.割り込みは大丈夫だと言っている場所もあれば、現在のスレッドでのみ利用できると言っている場所もあります.
ExecutorServiceを使用せずに、同じことを複製し、スレッドを生成してから中断しようとしましたが、正常に動作しました。
これが私が微調整できる (ありそうもない) セキュリティの問題なのか、それともバグなのか、アイデアはありますか? ExecutorService を再実装したくありません。
ありがとう!