现在我和杰克逊一起工作,我对此有一些疑问.
首先.我有两个服务,第一个是数据收集和发送服务,第二个接收这些数据,例如,将其记录到文件中.
所以,第一个服务有类层次结构,如下所示:
+----ConcreteC
|
Base ----+----ConcreteA
|
+----ConcreteB
Run Code Online (Sandbox Code Playgroud)
第二个服务有类层次结构,如下所示:
ConcreteAAdapter extends ConcreteA implements Adapter {}
ConcreteBAdapter extends ConcreteB implements Adapter {}
ConcreteCAdapter extends ConcreteC implements Adapter {}
Run Code Online (Sandbox Code Playgroud)
第一个服务一无所知ConcreteXAdapter.
我在第一个服务上发送数据的方式:
Collection<Base> data = new LinkedBlockingQueue<Base>()
JacksonUtils utils = new JacksonUtils();
data.add(new ConcreteA());
data.add(new ConcreteB());
data.add(new ConcreteC());
...
send(utils.marshall(data));
...
public class JacksonUtils {
public byte[] marshall(Collection<Base> data) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream() {
@Override
public byte[] toByteArray() {
return buf;
}
};
getObjectMapper().writeValue(out, data);
return …Run Code Online (Sandbox Code Playgroud) 关于JLS ch17 线程和锁,它说"如果一个动作发生在另一个之前,那么第一个动作在第二个之前可见并且在第二个之前被命令"; 我想知道:
(1)说"之前订购"的真正含义是什么?因为即使action_a发生在action_b之前,action_a也可以在action_b之后的某些实现中执行,对吧?
(2)如果action_a发生在action_b之前,是否意味着action_a绝不能看到action_b?或者action_a可能会看到或看不到action_b?
(3)如果action_a没有发生 - 在action_b之前,而action_b没有发生 - 在action_a之前,是否意味着action_a可能会看到或看不到action_b?
(4)之前没有任何循环发生,对吧?
任何答案将不胜感激:)