Java thread中的callback和Future的简单使用

package threadPa;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


/** 
 * @author ltz: 
 * @version 上午11:43:37 
 * 类说明 
 */
public class ThreadCallTest {
  public static void main(String[]args){
  ExecutorService exe=Executors.newCachedThreadPool();
  Task task=new Task();
  
  Future<Integer> result=exe.submit(task);
  exe.shutdown();
  
  try {
System.out.println("call result"+result.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
  System.out.println("over");
  
  }
}


class Task implements Callable<Integer>{


@Override
public Integer call() throws Exception {
System.out.println("begin ....");
Thread.sleep(3000);
return 100;
}


}

 我们先来看一下FutureTask的实现:

1
public  class  FutureTask<V>  implements  RunnableFuture<V>

   FutureTask类实现了RunnableFuture接口,我们看一下RunnableFuture接口的实现:

1
2
3
public  interface  RunnableFuture<V>  extends  Runnable, Future<V> {
     void  run();
}

   可以看出RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。

  FutureTask提供了2个构造器:

1
2
3
4
public  FutureTask(Callable<V> callable) {
}
public  FutureTask(Runnable runnable, V result) {
}

  事实上,FutureTask是Future接口的一个唯一实现类。


以下是一个使用Callback实现异步回调的Java示例代码: ```java public interface Callback { void onSuccess(String result); void onFailure(String error); } public class MyTask { public void doTask(final Callback callback) { new Thread(new Runnable() { @Override public void run() { try { // 模拟耗时操作 Thread.sleep(3000); // 返回成功结果 callback.onSuccess("Task completed successfully."); } catch (InterruptedException e) { // 返回错误信息 callback.onFailure("Task interrupted with error: " + e.getMessage()); } } }).start(); } } public class Main { public static void main(String[] args) { MyTask task = new MyTask(); task.doTask(new Callback() { @Override public void onSuccess(String result) { System.out.println(result); } @Override public void onFailure(String error) { System.out.println(error); } }); } } ``` 在这个示例,我们定义了一个Callback接口,其包含两个方法onSuccess和onFailure。MyTask类的doTask方法接受一个Callback参数,表示异步任务完成后的回调函数。在doTask方法,我们创建了一个新的线程来执行耗时操作,并在操作完成后调用Callback的onSuccess方法或onFailure方法,根据操作的结果进行相应的回调。在Main类,我们创建了一个MyTask对象,并调用doTask方法,同时传入一个实现了Callback接口的匿名内部类作为回调函数。当MyTask的耗时操作完成后,会自动调用回调函数的相应方法,从而达到异步回调的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值