如何在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

