如何在Java中将可运行对象转换为可调用对象
时间:2020-01-09 10:35:12 来源:igfitidea点击:
在Java中,有两种方法可以实现一个类,该类的实例将由线程执行。
- 通过实现Runnable接口。
- 通过实现Callable接口。
查看这篇文章Java中Runnable和Callable之间的区别,以了解Java中Runnable和Callable之间的区别。
但是,如果我们有一个Runnable并想在运行时将其转换为Java中的Callable怎么办。 Java中的Executors类提供了实用程序方法来进行这种转换。
- callable(Runnable task)–返回一个Callable对象,该对象在被调用时运行给定任务并返回null。
- callable(Runnable task,T result)–返回一个Callable对象,该对象在被调用时运行给定的任务并返回给定的结果。
在Java中将Runnable转换为Callable
1使用第一个方法–可调用(可运行任务)
public class RunnableToCallable { public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(2); // converting runnable task to callable Callable<Object> callable = Executors.callable(new MyRunnable()); // submit method Future<Object> f = es.submit(callable); try { System.out.println("Result- " + f.get()); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } es.shutdown(); } } class MyRunnable implements Runnable{ @Override public void run() { System.out.println("Running task.."); } }
输出:
Running task.. Result- null
2使用第二个方法callable(可运行任务,T结果)
public class RunnableToCallable { public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(2); // converting runnable task to callable Callable<String> callable = Executors.callable(new MyRunnable(), "From callable"); // submit method Future<String> f = es.submit(callable); try { System.out.println("Result- " + f.get()); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } es.shutdown(); } } class MyRunnable implements Runnable{ @Override public void run() { System.out.println("Running task.."); } }
输出:
Running task.. Result- From callable