- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下代码(大纲):
ExecutorService executor = Executors.newFixedThreadPool(20);
List<Future<statusModel>> futures = new ArrayList<Future<statusModel>>();
for (Map.Entry<String, String> url : urls.entrySet())
{
Future<statusModel> future = executor.submit(mycallable);
futures.add(future);
}
for (Map.Entry<String, String> url : urls.entrySet())
{
try
{
status = (statusModel) futures.get(i).get(50, TimeUnit.MILLISECONDS);
// do stuff with status
}
catch (InterruptedException | ExecutionException | TimeoutException e)
{
System.out.println("Error<checkServers>: Timeout OR "+e.getMessage());
}
}
executor.shutdownNow();
System.out.println("Shutdown: "+executor.isShutdown());
我的控制台显示:关闭:true
myCallable:
public statusModel call() throws Exception
{
InputStream in = null;
BufferedReader br = null;
statusModel status = new statusModel();
try
{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
status.setStatusCode(conn.getResponseCode());
status.setUrl(urlStr);
if(status.getStatusCode()/100 == 2) // Status = OK
{ // Read JSON response }
}
catch (MalformedURLException e)
{
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(in != null)
in.close();
if(br != null)
br.close();
}
return status;
}
有时,当我一遍又一遍地运行此 block 时,我会收到此错误:
Aug 20, 2013 9:35:44 AM org.apache.catalina.core.StandardWrapper unload INFO: Waiting for 1 instance(s) to be deallocated Aug 20, 2013 9:35:45 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: The web application [/Server_Status] is still processing a request that has yet to finish. This is very likely to create a memory leak. You can control the time allowed for requests to finish by using the unloadDelay attribute of the standard Context implementation. Aug 20, 2013 9:35:45 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: The web application [/Server_Status] appears to have started a thread named [pool-3-thread-6] but has failed to stop it. This is very likely to create a memory leak.
我已经关闭了“执行器”,也检查了同样的情况。我仍然收到此错误。我在这里做错了什么吗?
更新:我是第一次使用 Future。如果我需要发布更多内容以更好地解释,请告诉我。
更新:我尝试打印所有 future.isDone()。由于某种原因,超出超时时间的 future 仍然返回 isDone() = false - 没有被 timout 取消:(
感谢任何帮助。提前致谢。
最佳答案
shutdownNow()
终止所有仍在运行的作业,这可能是导致错误消息的原因。您可能需要 shutdown()
它不会让任何新作业提交,但让已排队的作业继续执行。
此外,您需要通过调用 future.get()
等待 futures 完成(如果 future 尚未完成,则可能会阻塞)以获取结果。
for(Future<statusModel> future : futures){
statusModel model = future.get();
//do stuff with statusModel
}
编辑:既然已经发布了附加代码,我已将其附加到我的答案中:
我已经重新检查了 javadoc 中的 future.get(long timeout, TimeUnit unit)
,它并没有说如果发生超时,那么 future 就会被取消。我还检查了 Brian Goetz 的《Java Concurrency in Practice》(顺便说一句,这是一本很棒的书;必读),在第 147 页上推荐了以下内容:
try{
future.get(timeout, unit);
}catch(TimeoutException e){
//task will be cancelled below
}catch(ExecutionException e){
//exception thrown in task; rethrow
//... throw new MyWrappedException(e.getCause());
}finally{
//Harmless if task already completed
future.cancel(true); //interrupt if still running
}
关于java - future - 线程未能停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18336782/
我正在使用 Tkinter 在 python 上写一个小游戏(顺便说一下,我不允许使用任何其他非内置模块)并且我想在主窗口上播放背景歌曲,这是那个包含标题,以及转到其他窗口和内容的按钮... 所以问题
我有一个 Azure WebJob,它在一个非常简单的应用服务标准:1 Small(计划)上运行。 现在,我的 WebJob(有 5 个函数正在运行)出现问题 - 我想停止 5 个正在运行的函数中的
我在 MacOS Lion 上使用 XCode 4.2。在模拟器中调试 iPhone/iPad 应用程序时,我使用 XCode 工具栏上的“停止”按钮(产品 | 停止)退出应用程序。在此之后,XCod
我刚刚下载了android开放源代码项目,并尝试使用make来构建它,我收到了以下消息: build/core/prebuilt.mk:91: *** recipe commences before
我以前从未制作过 makefile,但我们已经收到了这个,但是,如果我尝试运行它,它只会说, missing separator. stop. 我不知道可能出了什么问题 - 我已经确保空格只按制表符。
好吧,这段代码非常基本。用户将答案输入文本框,如果等于“第一+第二”,他们就得到一分。然后,他们有 5 秒钟的时间回答下一个数学问题。如果他们这样做了,函数“doCalculation”将再次运行,他
我在 viewController 中有一个循环动画 - (void)moveAnimating { [UIView animateWithDuration:2.0f animations:^
当我有一个待处理的 ASIFormDataRequest(作为异步任务启动)仍在执行并且用户按下后退按钮(为了弹出 View )时,我的 viewController 出现问题。 有什么方法可以停止该
我们正在使用 flashdevelop 和 flash CS 3 开发基于 flash 的游戏。我们正在使用 flash CS3 发布 swc,swc 将作为库在 flashdevlop 中使用。 一
我在线程中有一个连接,因此我将其添加到运行循环中以获取所有数据: [[NSRunLoop currentRunLoop] run]; [connection scheduleInRunLoop
你好,我做了一个 php 套接字服务器来从 plc 获取数据,plc 被配置为 tcp 套接字客户端。 我有一个严重的问题,如果本地网络出现故障,似乎功能 socket_accept 停止,plc 无
这个问题已经有答案了: How to stop a setTimeout loop? (10 个回答) 已关闭 8 年前。 请帮助获得正确的函数或方法来停止 setTimeout 函数。 我一直在尝试
我正在运行一个多项目SBT(v0.13)构建,并且希望它在子项目中遇到的第一个错误(编译)时快速失败(停止)。 当前的行为是,当某项无法在子项目中进行编译时,构建将继续(以编译所有其他子项目)。 一旦
我有播放.wav文件中声音的代码,但是我无法停止播放歌曲,甚至无法退出程序直到播放结束。因为这是一首5分钟的歌曲,所以这是一个问题。这是我如何播放wav的代码: public class EasySo
我正在寻找一种解决方案,该如何控制从JSF应用程序播放音频文件。 我不需要完整的解决方案,只需引用我可以用来控制播放音频文件(开始/停止/更改声音)的组件即可。 我尝试搜索过去的问题,但没有成功。 我
我已经在test.ps1中编写了以下函数,在运行该脚本以启动/停止/ ..时我想做一个选择: function getState($SeviceName) { $server = @('hos
我必须设置一个 10 分钟的计时器,它会重定向到主屏幕。此外,它必须在每个操作(例如按下按钮)时重置。我找到了这个计时器:https://github.com/fengyuanchen/vue-cou
我正在制作一个聊天应用程序,功能之一就是发送声音。发送的HTML如下: LOL Stop Play 第一次发送时,“自动播放”效果很好。因此,现在我
我基本上希望页面能够接受用户输入的时间(以秒为单位)。 之后我希望当用户按下“开始”按钮时开始倒计时按下暂停按钮时“暂停”。还有一个重置按钮,以便用户可以从头开始倒计时。 这是我到目前为止得到的:
我需要停止 $.each 循环,加载图像,然后继续循环。我有 Canvas ,可以在其中加载对象图像。对象以正确的顺序排列在数组中。现在,当我尝试从数组加载对象时,存在一个问题:由于尺寸不同,并且它们
我是一名优秀的程序员,十分优秀!