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
*/