这里模拟个场景:客户端发送msg给服务端,服务端处理后(5秒),回调给客户端,告知处理成功。代码如下:
回调接口类
public interface CSCallBack
{
public void process(String status);
}
模拟客户端
public class Client implements CSCallBack
{
private Server server;
public Client(Server server)
{
this.server = server;
}
public void sendMsg(final String msg)
{
System.out.println("客户端:发送的消息为:" + msg);
new Thread(new Runnable()
{
@Override
public void run()
{
server.getClientMsg(Client.this, msg);
}
}).start();
System.out.println("客户端:异步发送成功" );
}
@Override
public void process(String status)
{
System.out.println("客户端:服务器端回调状态为:" + status);
}
}
模拟服务端
public class Server
{
public void getClientMsg(CSCallBack csCallback, String msg)
{
System.out.println("服务端:服务器端接收到客户端发送的消息为:" + msg);
try
{
Thread.sleep( 5 * 1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println("服务器端:数据处理成功,返回成功状态 200");
String status = "200";
csCallback.process(status);
}
}
测试类
public class CallBackTest
{
public static void main(String[] args)
{
Server server = new Server();
Client client = new Client(server);
client.sendMsg("Server , Hello~");
}
}
输出结果
客户端:发送的消息为:Server , Hello~
客户端:异步发送成功
服务端:服务器端接收到客户端发送的消息为:Server , Hello~
服务器端:数据处理成功,返回成功状态 200
客户端:服务器端回调状态为:200
这里可能会有疑问,就是为什么是先打印“异步发送成功”,然后再执行新的线程。
把客户端的代码改一下
public class Client implements CSCallBack
{
private Server server;
public Client(Server server)
{
this.server = server;
}
public void sendMsg(final String msg)
{
System.out.println("客户端:发送的消息为:" + msg);
new Thread(new Runnable()
{
@Override
public void run()
{
server.getClientMsg(Client.this, msg);
}
}).start();
//修改的地方在这里,添加了一个循环
for(int i =0; i < 5; i++)
{
System.out.println("客户端:异步发送成功----" + i );
}
}
@Override
public void process(String status)
{
System.out.println("客户端:服务器端回调状态为:" + status);
}
}
输出结果
客户端:发送的消息为:Server , Hello~
客户端:异步发送成功----0
客户端:异步发送成功----1
服务端:服务器端接收到客户端发送的消息为:Server , Hello~
客户端:异步发送成功----2
服务器端:数据处理成功,返回成功状态 200
客户端:异步发送成功----3
客户端:服务器端回调状态为:200
客户端:异步发送成功----4
可以看到这里体现了线程的时间片轮转机制。