FutureTask的使用

mac2024-03-15  27

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()); }

当然还有利用线程池的方式,这里就不再累述

最新回复(0)