public static class Task<T> extends FutureTask<T> {
public Task(Callable<T> callable) {
super(callable);
}
@Override
protected boolean runAndReset() {
return super.runAndReset();
}
public static class Task<T> extends FutureTask<T> {
public Task(Callable<T> callable) {
super(callable);
}
protected boolean self() {
return super.runAndReset();
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
Task<Integer> task = new Task<>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
TimeUnit.SECONDS.sleep(3);
return 1;
}
});
Thread thread = new Thread(task);
thread.start();
// task.runAndReset(); // 重新执行
// task.run(); // 内部自带Callable封装,执行线程为调用该方法的线程
Integer res = task.get();
System.out.println(res);
// task.cancel(false); // true : Interrupted。 false: Cancelled;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
Task<Integer> task = new Task<>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
TimeUnit.SECONDS.sleep(3);
return 1;
}
});
Thread thread = new Thread(task);
thread.start();
task.run(); // 内部自带Callable封装,执行线程为调用该方法的线程
// task.runAndReset(); // 重新执行
task.self();
Integer res = task.get();
System.out.println(task.get());
// task.cancel(false); // true : Interrupted。 false: Cancelled;
System.out.println("---------第二种执行方式--------");
task.run(); // 内部自带Callable封装,执行线程为调用该方法的线程
// task.runAndReset(); // 重新执行, 该方法为protected类型,不能通过父类直接访问,或在 另一类中通过子类对象访问父类的protected属性或 方法,怎样访问呢,可以通过子类的方法间接访问父类protected属性
task.self();
System.out.println(task.get());
}
当然还有利用线程池的方式,这里就不再累述