问题我已经多年了:在这个伪代码中,
ExecutorService svc = Executors.newFixedThreadPool(3);
svc.submit(new Runnable() { /* code A */ });
svc.shutdown();
if(svc.awaitTermination(...)) {
// code B
Run Code Online (Sandbox Code Playgroud)
.awaitTermination()没有记录在代码A和B之间发生的事情. 有没有理由不是?
该ExecutorService的和concurrent包的javadoc定义的之前发生完成的任务和工作之间之前,他们已提交,但不执行的任务和代码之间的成功后.awaitTermination()调用.
注意,我不是要求设计批评如何重构我的代码以利用记录的事先关系.我的问题是,在这种情况下,有没有理由说文档没有提及?
(请注意,尽管标题非常贴切,但这并不是22665198的重复.)
java concurrency executorservice memory-barriers happens-before
TestProbe.expectNoMsg()在不在config中的代码中设置默认超时的正确方法是什么?
我知道我可以akka.test.single-expect-default在application.conf中定义,但这适用于我的模块中的所有测试.或类似的东西
ActorSystem(.., ConfigFactory.parseString("{akka.test.single-expect-default = 0}"))
Run Code Online (Sandbox Code Playgroud)
在代码工作,但我希望能够设置此超时
implicit val timeout = Timeout(100 millis)
Run Code Online (Sandbox Code Playgroud)
我已经看过但是没有得到认可.
我的考试是
@RunWith(classOf[JUnitRunner])
class MySuite extends path.FunSpec with Matchers {
implicit val system = ActorSystem("MySuite")
val probe = new TestProbe(system)
describe ("timeout") {
println("Waiting..")
probe.expectNoMsg()
println("Waited")
}
}
Run Code Online (Sandbox Code Playgroud) Java 8为什么没有Optional实现Iterable?
我认为这是故意的语言选择,但我想知道为什么。Scala Option和Haskell的Maybe实现遍历方法类似于Iterable。FWIW,Java 9将实现Optional.stream()(JDK-8050820)。