我在proto文件中定义了一个rpc服务,但我在输出java文件中找不到任何接口或方法.
$ protoc -v
libprotoc 2.5.0
Run Code Online (Sandbox Code Playgroud)
原型文件:
service EchoService {
rpc Echo (Person) returns (Person);
}
Run Code Online (Sandbox Code Playgroud)
编译脚本:
#!/bin/bash
for file in `find src/main/proto -name "*.proto"`; do
protoc --proto_path=src/main/proto --java_out=src/main/java/ $file
done
Run Code Online (Sandbox Code Playgroud) 我在阅读JDK ConcurrentLinkedQueue时发现UNSAFE.compareAndSwapObject非常奇怪.(CLQ类是来自ConcurrentLinkedQueue的副本,以便于调试......)
当我向ConcurrentLinkedQueue提供第一项时.
在
p.casNext(null, newNode)
head == tail == p == t ref之前的同一个对象,就像这样.
之后进入casNext
UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
p.next按预期引用newNode,就像这样.
走出去提供
一切都变得奇怪......我可以理解为什么p.next ref伤口改为p,如何自动引导newNode ...
代码:ConcurrentLinkedQueue.class offer()
public boolean offer(E e) {
checkNotNull(e);
final Node<E> newNode = new Node<E>(e);
for (Node<E> t = tail, p = t;;) {
Node<E> q = p.next;
if (q == null) {
// p is last node
if (p.casNext(null, newNode)) {
// Successful CAS is the linearization point
// for e to become …Run Code Online (Sandbox Code Playgroud)