【发布时间】:2015-12-19 11:13:50
【问题描述】:
我想通过ChannelService.sendMessage 在ThreadManager.createThreadForCurrentRequest 可运行方法中发送消息。但是当我在 doGet 中调用此方法时,我在码头记录器中有一条错误消息。
这是我在 HttpServlet 类中的代码:
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
name = req.getParameter("name");
ThreadManager.createThreadForCurrentRequest(new Runnable() {
@Override
public void run() {
for (int i = 10; i < 100; i++) {
d = com.google.appengine.repackaged.org.joda.time.DateTime.now();
serverTime = String.valueOf(d.getMillis());
ChannelMessage channelMessage = new ChannelMessage("logger", i+ " Message..... " + name + " Server Time: " + serverTime + " Client Time:");
getChannelService().sendMessage(channelMessage);
}
}
}).start();
}
这是码头记录器中的错误:
Exception in thread "Thread-12" java.lang.RuntimeException: Interrupted while waiting on semaphore:
at com.google.appengine.tools.development.ApiProxyLocalImpl.makeAsyncCall(ApiProxyLocalImpl.java:193)
at com.google.appengine.tools.development.ApiProxyLocalImpl.makeSyncCall(ApiProxyLocalImpl.java:156)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:118)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:67)
at com.google.appengine.api.channel.ChannelServiceImpl.sendMessage(ChannelServiceImpl.java:85)
at com.roundtableapps.pluto.backend.MyServlet$1.run(MyServlet.java:42)
at com.google.appengine.tools.development.RequestThreadFactory$1$1$2.run(RequestThreadFactory.java:110)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.RequestThreadFactory$1$1.run(RequestThreadFactory.java:107)
Caused by: java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1301)
at java.util.concurrent.Semaphore.acquire(Semaphore.java:317)
at com.google.appengine.tools.development.ApiProxyLocalImpl.makeAsyncCall(ApiProxyLocalImpl.java:190)
... 8 more
我该如何解决这个问题?
【问题讨论】:
标签: java google-app-engine servlets