`
lippeng
  • 浏览: 451153 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java异步编程之Deferred

阅读更多

写了很简单的例子,用来测试 https://github.com/OpenTSDB/async

 

通过例子,可以看出Deferred的使用方式,执行顺序,理解了这个例子,基本上就明白了Deferred的工作机制。

 

Maven依赖:

        <dependency>
            <groupId>com.stumbleupon</groupId>
            <artifactId>async</artifactId>
            <version>1.4.1</version>
        </dependency>

 

Java代码:

import com.stumbleupon.async.Deferred;

import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import static java.lang.System.out;

public class TestDeferred {
    public static void main(String[] args) throws InterruptedException {
        out.println(Thread.currentThread().getName());

        Deferred<String> deferred = new Deferred<>().addBoth(str -> {
            out.println(Thread.currentThread().getName() + " 1 " + str.toString());
            return str;
        }).addBothDeferring(str -> {
            out.println(Thread.currentThread().getName() + " 2 " + str);

            Deferred<String> d = new Deferred<>().addBoth(s -> {
                out.println(Thread.currentThread().getName() + " 3 " + s.toString());
                return s.toString();
            });

            Executors.newSingleThreadExecutor().execute(() -> {
                out.println(Thread.currentThread().getName() + " started.");
                d.callback("hello");
            });
            return d;
        }).addBoth(str -> {
            out.println(Thread.currentThread().getName() + " 4 " + str.toString());
            return str;
        }).addErrback(str -> {
            out.println(str.toString());
            return str;
        });

        Executors.newSingleThreadExecutor().execute(() -> {
            out.println(Thread.currentThread().getName() + " started.");
//            deferred.callback("hello");
            deferred.callback(new NullPointerException("error."));
        });

        out.println(Thread.currentThread().getName() + " sleeping...");
        TimeUnit.MINUTES.sleep(1);
    }
}

 

输入:

main
main sleeping...
pool-1-thread-1 started.
pool-1-thread-1 1 java.lang.NullPointerException: error.
pool-1-thread-1 2 java.lang.NullPointerException: error.
pool-2-thread-1 started.
pool-2-thread-1 3 hello
pool-2-thread-1 4 hello

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics