`
wusuoya
  • 浏览: 628869 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Java异步和回调 Demo

    博客分类:
  • Java
 
阅读更多
public interface CallBack {
    /**
     * 执行回调方法
     * @param objects   将处理后的结果作为参数返回给回调方法
     */
    public void execute(Object... objects );
}


public class Local implements CallBack,Runnable{
    private Remote remote;

    /**
     * 发送出去的消息
     */
    private String message;

    public Local(Remote remote, String message) {
        super();
        this.remote = remote;
        this.message = message;
    }

    /**
     * 发送消息
     */
    public void sendMessage()
    {
        /**当前线程的名称**/
        System.out.println(Thread.currentThread().getName());
        /**创建一个新的线程发送消息**/
        Thread thread = new Thread(this);
        thread.start();
        /**当前线程继续执行**/
        System.out.println("Message has been sent by Local~!");
    }

    /**
     * 发送消息后的回调函数
     */
    public void execute(Object... objects ) {
        /**打印返回的消息**/
        System.out.println(objects[0]);
        /**打印发送消息的线程名称**/
        System.out.println(Thread.currentThread().getName());  //Thread-0
        /**中断发送消息的线程**/
        Thread.interrupted();
    }

    public static void main(String[] args)
    {
        Local local = new Local(new Remote(),"Hello");

        local.sendMessage();
    }

    public void run() {
        System.out.println(Thread.currentThread().getName());  //Thread-0
        remote.executeMessage(message, this);  //这相当于给同学打电话,打完电话之后,这个线程就可以去做其他事情了,只不过等到你的同学打回电话给你的时候你要做出响应

    }
}


public class Remote {
    /**
     * 处理消息
     * @param msg   接收的消息
     * @param callBack  回调函数处理类
     */
    public void executeMessage(String msg,CallBack callBack)
    {
        /**模拟远程类正在处理其他事情,可能需要花费许多时间**/
        for(int i=0;i<1000000000;i++)
        {

        }
        /**处理完其他事情,现在来处理消息**/
        System.out.println(msg);
        System.out.println("Remote hava executed the message from Local");
        /**执行回调**/
        callBack.execute(new String[]{"Nice to meet you~!"});  //这相当于同学执行完之后打电话给你
        System.out.println(Thread.currentThread().getName());  //Thread-0
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics