Aviator 中的函数都实现了 Java 中的 RunnableCallable 接口,只要这个函数是无参的,就可以直接作为 RunnableCallable 的实现使用,比如传给 Thread 构造函数,作为线程任务执行:

    1. ## examples/runnable.av
    2. let r = lambda() ->
    3. p("run in thread");
    4. end;
    5. let t = new Thread(r);
    6. start(t);
    7. join(t);

    r 是一个匿名的无参函数,直接用来创建一个执行线程,线程中打印文本:

    1. run in thread

    同时也可以作为 Callable 实现,返回一个结果:

    1. ## examples/callable.av
    2. let callable = lambda() ->
    3. new java.util.Date()
    4. end;
    5. p(call(callable));
    6. let task = new java.util.concurrent.FutureTask(callable);
    7. run(task);
    8. p(get(task));

    直接调用 call 方法,或者包装成 FutureTask 都可以:

    1. Mon Apr 27 12:16:07 CST 2020
    2. Mon Apr 27 12:16:07 CST 2020