Java 基础之CallBack的使用

在很多情况我们都会希望这样一个过 程,在我们执行某个任务之后,我们都能得到一个返回值,便于我们任务后的处理;比如线程,我们new thread,自然希望得到thread执行后的结果并做一些处理。

  • 我们实现线程两个,一个extends Thread(); 另一个implements
    Runnable(),但这两个方法都有一个致命的缺陷就是取不到返回值;通常我们是通过使用共享变量(static变量)
    线程见的通信来实现的如android handler 广播(Broadcast);
  • fulturetask 用来执行java超时操作 这是可以去做其他事情,过一段时间回来取得执行结果
/**
 * Created by jiangph on 16-1-10.
 */
public class fultureTaskDemo {

    /***
     * 我们传统上实现线程的两个方法,一个是继承Thread类;另一个是实现runnable接口
     * 但是这两个方法都有致命的:就是取不到返回值;通常我们是通过使用共享变量(static变量)  线程见的通信来实现的如android handler 广播(Broadcast)
     * fulturetask 用来执行java超时操作  这是可以去做其他事情,过一段时间回来取得执行结果
     */
    /***
     * fulture主要是来执行耗时的操作,同步下的异步操作
     *
     */
    public static void main(String[]args)
    {
        fultureTaskDemo fulturedemo=new fultureTaskDemo();
        //初始化一个callable对象和fulturetask对象
        Callable pAccount=fulturedemo.new PrivateAccount();
        FutureTask futureTask=new FutureTask(pAccount);
        //使用fulturetask创建一个线程
        Thread pAccountThread=new Thread(futureTask);
        System.out.println("fulturetask线程现在开始启动,启动时间为:"+System.nanoTime());
        pAccountThread.start();
        System.out.println("主线成开始执行其他人物");
        //从其他账户获取总及呢
        int totalMoney=new Random().nextInt(100000);
        System.out.println("现在你在其他账户中的总金额为" + totalMoney);
        System.out.println("等待私有账户总金额统计完毕...");
        while (!futureTask.isDone()){
            try {
                Thread.sleep(500);
                System.out.println("私有账户计算为完成继续等待...");
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
        System.out.println("futureTask线程计算完毕,此时时间为" + System.nanoTime());
        Integer privateAccountMoney=null;
        try{
            privateAccountMoney=(Integer)futureTask.get();
        }catch (InterruptedException e)
        {
            e.printStackTrace();
        }catch (ExecutionException e) {
            e.printStackTrace();
        }
        System.out.println("您现在的总金额为:" + totalMoney + privateAccountMoney.intValue());



    }

    @SuppressWarnings("all")
    class PrivateAccount implements Callable{
        Integer totalMoney;
        @Override
        public Object call() throws Exception
        {
            Thread.sleep(5000);
            totalMoney=new Integer(new Random().nextInt(10000));
            System.out.println("您当前有" + totalMoney + "在您的私有账户中");
            return totalMoney;
        }
    }
}

当然我们也可以试着自己写一个callBack,通过匿名类,接口来实现

package CallBack;

/**
 * Created by jiangph on 16-1-18.
 */
public class TestCallBack {

    public static void main(String[]args)
    {
        new TestCallBackDao().useCallBack(new CallBackInterface() {
            @Override
            public void onCallBack() {
                System.out.println("1");
            }
        });
    }
}


//定义一个业务处理类
class TestCallBackDao{
    public  void useCallBack(CallBackInterface callBackInterface)
    {
        //调用接口方法
        callBackInterface.onCallBack();
    }
}

interface CallBackInterface{
    public void onCallBack();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值