异步回调与同步回调

同步回调

        我们常用的一些请求都是同步回调的,同步回调是阻塞的,单个的线程需要等待结果的返回才能继续执行。


异步回调

        有的时候,我们不希望程序在某个执行方法上一直阻塞,需要先执行后续的方法,那就是这里的异步回调。我们在调用一个方法时,如果执行时间比较长,我们可以传入一个回调的方法,当方法执行完时,让被调用者执行给定的回调方法。


异步回调java实现demo


client接口

public interface Client {
	
	// 调用服务提供者的处理方法
	void process(int a,int b);

	//  异步回调方法
	void result(int i);

}

clientA类实现client接口

public class ClientA implements Client{
	
	// 初始化一个私有服务提供者
	private Server server;
	
	public ClientA(Server server){
		this.server = server;
	}

	@Override
	public void process(int a,int b) {
		ClientA c = this;
		// 这里启用另一个线程,让此线程继续执行
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				server.add(a,b,c);
				
			}
		}).start();;
		System.out.println("ClientA process end");
	}

	//异步返回结果
	@Override
	public void result(int i) {
		System.out.println("ClientA result is :"+i);
	}

}

clientB类实现client接口

public class ClientB implements Client{
	
	// 初始化一个私有服务提供者
	private Server server;

	public ClientB(Server server){
		this.server = server;
	}
	
	@Override
	public void process(int a,int b) {
		ClientB c = this;
		// 这里启用另一个线程,让此线程继续执行
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				server.add(a,b,c);
				
			}
		}).start();;
		System.out.println("ClientB process end");
	}

	//异步返回结果
	@Override
	public void result(int i) {
		System.out.println("ClientB result is :"+i);
		
	}

}

server类

public class Server {

	public void add(int i, int j,Client client) {
		// 要返回的结果
		int res = i+j;
		// 线程休息2秒
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		// 调用异步通知方法
		client.result(res);
	}

}

测试Test类

public class Test {

	public static void main(String[] args) {
		Server server = new Server();
		
		ClientA clientA = new ClientA(server);
		clientA.process(5,6);
		
		ClientB clientB = new ClientB(server);
		clientB.process(50,60);

	}

}

执行结果是

ClientA process end
ClientB process end
ClientA result is :11
ClientB result is :110
  • 11
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值