这个例子做了一个客户端发消息到服务端的场景。
1、接口回调,顾名思义,就是用接口来调用方法。
public interface Call {
void process(String status);
}
2、这个接口想在哪儿使用都可以。
public class Server {
public void getClientMsg(Call call, String msg) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 服务端对消息处理了5秒");
String status = "200";
call.process(status);
}
}
3、凑一个场景。
public class Client implements Call {
private Server server;
private volatile boolean bol = true;
public Client(Server server) {
this.server = server;
}
public void sendMsg(final String msg) {
System.out.println(Thread.currentThread().getName() + " 客户端给服务端发送了一个消息");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 消息经过了3秒传到了服务端");
server.getClientMsg(Client.this, msg);
}
}).start();
System.out.println(Thread.currentThread().getName() + " 客户端发送消息成功了");
while (bol) {
System.out.println(Thread.currentThread().getName() + " 客户端继续向下执行");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 客户端停止执行");
}
@Override
public void process(String status) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 经过了3秒,客户端收到了服务端返回的消息");
System.out.println(Thread.currentThread().getName() + " 收到了消息就让客户端下班吧!");
bol = false;
}
}
public class Main {
public static void main(String[] args) {
Server server = new Server();
Client client = new Client(server);
client.sendMsg("Hello World");
}
}
main 客户端给服务端发送了一个消息
main 客户端发送消息成功了
main 客户端继续向下执行
main 客户端继续向下执行
main 客户端继续向下执行
main 客户端继续向下执行
Thread-0 消息经过了3秒传到了服务端
main 客户端继续向下执行
main 客户端继续向下执行
main 客户端继续向下执行
main 客户端继续向下执行
main 客户端继续向下执行
Thread-0 服务端对消息处理了5秒
main 客户端继续向下执行
main 客户端继续向下执行
main 客户端继续向下执行
Thread-0 经过了3秒,客户端收到了服务端返回的消息
Thread-0 收到了消息就让客户端下班吧!
main 客户端停止执行