![]() |
1
76
您可以使用 ScheduledExecutorService 为了这个。首先,您只需提交一次即可立即开始并保留创建的未来。之后,您可以提交一个新任务,该任务将在一段时间后取消保留的未来任务。
这将执行处理程序(主要功能将被中断)10秒,然后取消(即中断)该特定任务。 |
![]() |
2
5
不幸的是,解决方案有缺陷。有一种虫子
如果您因此创建
您可以看到以下(非常粗糙)测试程序的问题:
程序会耗尽可用内存,尽管它会等待生成的
我想了一会儿,但不幸的是,我想不出一个好的解决办法。 编辑: 我发现这个问题被报道为 JDK bug 6602600 ,并且最近似乎已修复。 |
![]() |
3
4
在FutureTask中包装任务,您可以为FutureTask指定超时。看看我回答这个问题的例子, |
![]() |
4
1
用这个怎么样
|
![]() |
5
1
似乎问题不在JDK bug 6602600中(它在2010-05-22中解决了),而是在 循环中错误的睡眠呼叫(10)。另外请注意,主螺纹必须 通过在中调用sleep(0),直接有机会让其他线程实现更高的任务。 外圆的每一个分支。 我认为最好使用thread.yield()而不是thread.sleep(0) 以前问题代码的结果更正部分如下:
它可以正常工作,外计数器的数量高达1500000个测试圆。 |
![]() |
6
1
经过无数次的调查,
专业是你也可以提交
|
![]() |
7
1
使用john w-answer,我创建了一个实现,它在任务开始执行时正确地开始超时。我甚至为它编写了一个单元测试:)
但是,它不适合我的需要,因为某些IO操作不会在
不管怎样,如果有人感兴趣,我创建了一个要点: https://gist.github.com/amanteaux/64c54a913c1ae34ad7b86db109cbc0bf |
![]() |
8
0
这个备选方案怎么样:
小样本在这里:
|
![]() |
a a · 为什么在这个可重入锁示例中需要引用计数? 3 年前 |
![]() |
Grant · goroutines有高空闲唤醒电话 3 年前 |
![]() |
hoaz · 如何安全地清理并发映射 7 年前 |
![]() |
Alanpatchi · int基元类型的volatile声明 7 年前 |