Java中,如果某些API或者接口,采用回调模式,但是你的代码又需要等待对应结果输出后进行处理,必须等待后继续处理,该如何做?
举个例子,如果你用一个线程去轮询接受Socket输入,然后其他地方发送Socket,必须等待服务器响应才能继续处理,怎么办?
正常情况下,如果你直接在Socket中写入后立刻读取,是没有问题的,但是比如OKHTTP,异步模式,怎么才能等服务器返回后再继续处理代码?
答案是 synchronized。
例如:
Socket socket;
线程A:
while (socket.isConnected) {
line = socket.readLine();
if (line = "HTTP 200 OK")
if (line = "$")
}
线程 B:
// 此时服务器有返回的话,可能已经被线程A读取走了!所以不能简单地直接用 socket.readLine()在这里读取,但是有的时候我们又需要服务器返回的数据包进行处理,该怎么办?
答案:
Socket: socket;
Object: lock = new Object();
String Response;
Thread A:
while (socket.isConnected) {
response = readLine();
synchronized (lock) {
lock.notify();
}
}
Thead B:
public void setup() {
socket.write("Blabla");
synchronized (lock) {
lock.wait();
}
if (response == "Awesome")
Log.i("gogogo", "大哥你来了");
}