futureTask - 未来任务, 封装次线程,给主线程以后调用(异步)。常见方法:isDone(), get()
调用方式:
new Thread(futureTask/runnable).start()
new ThreadPoolExecutor.execute(futureTask/callable/runnable))
Future x = Executors.newFixedThreadPool(3).submit(futureTask/callable/runnable)
例子:
public class Thread08_futureTask {
public static void main(String[] args) {
mainTask();
}
public static void mainTask() {
Long cnt = 3l;
try {
System.out.println("count1:" + cnt);
new Thread(futureTask).start();
while (!futureTask.isDone()) { // isDone()
}
System.out.println("count2:" + (cnt + futureTask.get())); // get()
} catch (Exception e) {
e.printStackTrace();
}
}
static FutureTask<Long> futureTask = new FutureTask<Long>(new Callable<Long>() {
public Long call() {
try {
int sleepTime = new Random().nextInt(2000);
System.out.println("sleep " + sleepTime / 1000.0 + " seconds");
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
return Long.valueOf(2);
}
});
}