java - Java 初始化线程时出现拒绝访问错误

标签 java multithreading google-app-engine

我们尝试遵循 Java Thread Example? 中的示例- @Phil 给出的例子。

下面的代码片段 - 在运行期间 - 给出错误:

HTTP Error 500 
access denied ("java.lang.RuntimePermission" "modifyThreadGroup")

at CreateThreads.<init>(CreateThreads.java:15)
at LbaApi.doPost(LbaApi.java:32)

调用构造函数时会发生错误“public CreateThreads(ArrayList strList)”。 CreateThreads 是从 doPost 方法调用的 - 如下所示。我们尝试了很多选项,但无法解决该错误。关于此错误的任何建议 - 如果我们在这里遗漏了一些东西。谢谢,

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class LbaApi extends HttpServlet{

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        PrintWriter writer = resp.getWriter();

        String threadName = "TNAME";
        String inputJson = req.getParameter("inputJson");
        String outputJson = "";

        ArrayList<String> strList = new ArrayList<String>();

        strList.add(threadName);
        strList.add(inputJson);
        strList.add(outputJson);

        CreateThreads myThread = new CreateThreads(strList); //Line 32          
        myThread.start();

        resp.setContentType("text/plain");

        outputJson = strList.get(2);        
        writer.println(outputJson);     
    }

}

而CreateThreads代码段如下:

import java.util.ArrayList;

public class CreateThreads extends Thread {

    private ArrayList<String> strList;          
    private String threadName;

    public CreateThreads(ArrayList<String> strList) {//Line 15

        this.threadName     = strList.get(0);
        super.setName(this.threadName);
        this.strList        = strList;

    }

    @Override
    public void run() {

        if (this.threadName.equals("TNAME")){

            String outputJson = "{'TableA':{'field_A1':'A_11'}}";           
            this.strList.add(outputJson);           
        }
    }
}

最佳答案

为了在应用程序引擎应用程序中使用线程,您可以生成一个线程 documented in the official docs :

  1. 创建一个实现 Runnable 的类
  2. 使用 com.google.appengine.api.ThreadManager.currentRequestThreadFactory() 创建线程工厂
  3. 使用您的 Runnable 作为参数调用上述工厂的 newRequestThread()

请注意,除非您使用后端服务器,否则您的线程无法“超过”您当前的请求,这使得线程基本上仅对 cron 作业和任务有用,这些作业和任务没有通常的 60 秒超时,而是 10 分钟.

我看到了URL由 @Andreas 发布,但是我不认为 aerospike 的答案是合适的。 aerospike.com 上的问题是关于有人试图在应用程序引擎上运行通用 Java EE 应用程序,因此创建线程的方式与应用程序引擎环境不兼容。

关于java - Java 初始化线程时出现拒绝访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941579/

相关文章:

c# - 并行编程 : create a certain number of processes and related data/work

python - 在多线程上进行预测时出现 Keras 错误

python - Google App Engine 中的 Google map 上未显示标记

java - Lucene-Appengine 的 SegmentIndexInput readByte 方法中的 NullPointerException

java - Spring @Autowired 用于 setter 方法与非 setter 方法

java - 编写 JUnit 测试用例时使用 SpringRunner 而不使用 SpringContext 是一个好习惯吗?

java - Autowiring 抽象组件

java - 带线程的对话框消息

java - App Engine 使用对称密码

java - jsp包括不工作