guava異步回調處理(ListeningExecutorService、MoreExecutors.listeningDecorator、ListenableFuture、 Futures)

1)Fabi.java

package org.example.guavalistener;

import java.util.Random;
import java.util.concurrent.Callable;

public class Fabi implements Callable<Integer> {
    private int n;

    public Fabi(int n) {
        this.n = n;
    }

    public int f(int nParam) {
        if (nParam <= 2) {
            return 1;
        }

        return f(nParam - 1) + f(nParam - 2);
    }

    @Override
    public Integer call() throws Exception {
        Thread.sleep(1000);

        // 模擬拋出異常,看看java能否捕捉到
        int num = new Random().nextInt();
        if (num % 2 == 0) {
            throw new RuntimeException("num:" + num);
        }

        return f(this.n);
    }
}

2)FutureDemo.java

package org.example.guavalistener;

import com.google.common.util.concurrent.*;

import javax.annotation.Nullable;
import java.util.concurrent.Executors;

public class FutureDemo {
    public static void main(String[] args) {
        int nCore = Runtime.getRuntime().availableProcessors();
        ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(nCore));

        for (int i = 0; i < 20; i++) {
            ListenableFuture<Integer> task = service.submit(new Fabi(40));
            Futures.addCallback(task, new FutureCallback<Integer>() {
                @Override
                public void onSuccess(@Nullable Integer val) {
                    System.out.println(Thread.currentThread().getName() + " " + val);
                }

                @Override
                public void onFailure(Throwable throwable) {
                    System.out.println(throwable.getMessage());
                }
            }, MoreExecutors.newDirectExecutorService());
        }

        // 關閉線程池
        service.shutdown();
    }
}

/*
num:-489637832
num:517832216
num:-1102246832
num:-856238472
num:1958671718
num:1931983114
pool-1-thread-2 102334155
pool-1-thread-8 102334155
num:-1308230936
num:-1715352316
num:369828344
pool-1-thread-5 102334155
pool-1-thread-4 102334155
pool-1-thread-3 102334155
pool-1-thread-7 102334155
pool-1-thread-8 102334155
num:2014192700
num:-1932260916
pool-1-thread-6 102334155
pool-1-thread-2 102334155
 */

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章