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