Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
servlet Google appengine Java中的线程(用于将数据从XML序列化为blob、pipedinput、pipedoutput)_Java_Google App Engine - Fatal编程技术网

servlet Google appengine Java中的线程(用于将数据从XML序列化为blob、pipedinput、pipedoutput)

servlet Google appengine Java中的线程(用于将数据从XML序列化为blob、pipedinput、pipedoutput),java,google-app-engine,Java,Google App Engine,如何知道在Google Appengineservlet中启动的线程何时完成了分配的任务 我正在使用pipedinput和pipedoutput获取信息,并将其放入XML中 变成一团。即XML序列化程序输出到管道的一端

如何知道在Google Appengine
servlet中启动的线程何时完成了分配的任务

我正在使用pipedinput和pipedoutput获取信息,并将其放入XML中
变成一团。即XML序列化程序输出到管道的一端<一根线 读取管道的另一端并将数据放入Blob

我知道必须使用ThreadFactory,newThread函数来激活线程 不能使用Java中调用
Thread.start()
的标准技术

以下是我如何声明和创建我的Runnable:

class T implements Runnable {
public void run(){
FileWriteChannel writeChannel=null;
try {
下面是创建线程的代码。注意,当我将类型T声明为 实现线程后,我得到以下安全异常:

class T implements Runnable {
public void run(){
FileWriteChannel writeChannel=null;
try {
...
如果我启动了一个扩展线程的类,Google Appengine会给我运行时错误。
如果我执行“implements”runnable,即上面示例中的TT,那么它就是一个实例
如果是ojbect thwt InImplements线程,则我无权访问联接
功能,该功能在Thread类中定义,但不是runnable

Thread Error java.security.AccessControlException: access denied
("java.lang.RuntimePermission" "modifyThreadGroup")     at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
    at
java.security.AccessController.checkPermission(AccessController.java:565)
    at
java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at


com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56)
    at
com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:131)
    at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)*
我在一个单独的线程中读取PipedInputStream,因为
PipedInputStream的API文档中的语句:

“管道输入流应连接到管道输出流;管道输入
然后,流提供写入管道输出流的任何数据字节。
通常,数据由一个线程从PipedInputStream对象读取,并且数据是
由其他线程写入相应的PipedOutputStream。
不建议尝试从单个线程使用两个对象,
因为它可能会使线程死锁。”

劳伦斯·勒夫博士,计算机科学副教授,

西伊利诺伊大学,伊利诺伊州Macomb 61455,在休假期间

你实际上从
TF.newThread(TT)
获得了
线程
。尝试对其调用
join()
。试试这个:

Thread myThread= TF.newThread(TT);
myThread.join();
另请注意:
currentRequestThreadFactory()
创建作用域为当前请求的线程。此类线程的副作用是它们不能比请求更长寿,因为:

返回一个ThreadFactory,该ThreadFactory将创建作用域为当前请求的线程。这些线程将在当前请求结束时中断,并且必须在请求截止日期内完成。

Thread myThread= TF.newThread(TT);
myThread.join();