考虑下面的Java示例.请注意,两个类成员变量都没有声明为volatile.如果我正在理解内存模型并且"之前发生"规则正确,那么Java实现可以优化该run()方法,以便它永远运行,即使另一个线程调用该stopNow()方法.这可能发生,因为run()方法中没有任何内容强制线程stop多次读取值.那是对的吗?如果没有,为什么不呢?
class Example implements Runnable {
boolean stop = false;
int value = 0;
public void stopNow() {
stop = true;
}
public int getValue() {
return value;
}
@Override
public void run() {
// Loop until stop is set to true.
while (!stop) {
++value;
}
return;
}
}
Run Code Online (Sandbox Code Playgroud) 是否有可供 Storm Spout 或 Bolt 访问其 ID 的 API?我所指的 IDString是传递给class 中的setSpoutorsetBolt方法的 ID backtype.storm.topology.TopologyBuilder。
出于日志记录的目的访问此字符串会很有用。
当我尝试获取像这样的亚马逊身份数据
val pipeline: HttpRequest => Future[IdentityData] = sendReceive ~> unmarshal[IdentityData]
pipeline(Get("http://169.254.169.254/latest/dynamic/instance-identity/document"))
Run Code Online (Sandbox Code Playgroud)
使用适当的case类和formatter,我收到以下异常
UnsupportedContentType(预期'application/json')
因为亚马逊将其回复标记为文本/纯文本内容类型.他们也不关心Accept header param.是否有一种简单的方法可以告诉spray-json在解组时忽略它?
是否有一个习惯用于为ScalaTest匹配器添加线索,以便线索将成为断言失败的一部分?我知道我现在可以像这样写一个ScalaTest断言:
withClue("expecting a header row and 3 rows of data") {
rowCount should equal(4)
}
Run Code Online (Sandbox Code Playgroud)
这是为断言添加线索的唯一语法吗?能够写一个断言看起来像这样的东西会很好:
rowCount should equal(4) because("expecting a header row and 3 rows of data")
Run Code Online (Sandbox Code Playgroud) 第一次喷涂用户无法在任何地方找到任何适当的示例.我想要解组包含一个的XML API响应List[Person].
说case class Person(name: String, age: Int).unmarshaller应该产生适当的List[Person].
Spray有一个默认值,NodeSeqUnmarshaller但我无法弄清楚如何正确地连接东西,会感激任何指针.