您的位置:首页 > 编程语言 > Java开发

Java 基础之CallBack的使用

2016-01-18 21:10 465 查看
在很多情况我们都会希望这样一个过 程,在我们执行某个任务之后,我们都能得到一个返回值,便于我们任务后的处理;比如线程,我们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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: