• 并发:Callabel 接口


    Callable 接口是一个具有类型参数的泛型,它的 call() 方法返回一个泛型,并且可以抛出异常。必须使用 ExecutorService#submit() 方法调用它。

     1 public class TaskWithResult implements Callable<String> {
     2 
     3     private int id;
     4 
     5     public TaskWithResult(int id) {
     6         this.id=id;
     7     }
     8 
     9     @Override
    10     public String call() throws Exception {
    11         // TODO Auto-generated method stub
    12         return "result of TaskWithResult:" + id;
    13     }
    14 
    15 }
     1 public class CallableDemo {
     2     public static void main(String[] args) {
     3         // TODO Auto-generated method stub
     4         ExecutorService exec = Executors.newCachedThreadPool();
     5         ArrayList<Future<String>> results = new ArrayList<Future<String>>();
     6         for (int i = 0; i < 10; i++)
     7             results.add(exec.submit(new TaskWithResult(i)));
     8         for (Future<String> fs : results)
     9             try {
    10                 System.out.println(fs.get());
    11             } catch (InterruptedException e) {
    12                 // TODO Auto-generated catch block
    13                 e.printStackTrace();
    14             } catch (ExecutionException e) {
    15                 // TODO Auto-generated catch block
    16                 e.printStackTrace();
    17             }finally{
    18                 exec.shutdown();
    19             }
    20     }
    21 }

    submit() 方法会返回一个 Future 对象,Future 对象把 Callable#call() 的返回值按特定进行进行参数化,调用 Future#get() 可以得到 call() 的返回结果。用 Future#isDone() 判断线程是否执行结束 ,如果直接调用 Future#get() ,get() 将会阻塞,直到结果准备就绪。

    执行结果:

    result of TaskWithResult:0
    result of TaskWithResult:1
    result of TaskWithResult:2
    result of TaskWithResult:3
    result of TaskWithResult:4
    result of TaskWithResult:5
    result of TaskWithResult:6
    result of TaskWithResult:7
    result of TaskWithResult:8
    result of TaskWithResult:9

  • 相关阅读:
    推荐一个wpf&sliverlight的图表控件
    数独求解
    WPF中的 CollectionChanged事件通知
    Windows 7 任务栏之缩略图预览(Thumbnail)
    把Google HK设为IE默认的搜索引擎
    F#小记——1. Hello F#
    F#小记——2. 基本数据类型
    使用异步socket的时候需要注意memory spike
    《everytime you kissed me》的中文歌词
    我回来了o(∩_∩)o...
  • 原文地址:https://www.cnblogs.com/mada0/p/4713181.html
Copyright © 2020-2023  润新知