In Java there are two ways to implement a class whose instances are to be executed by a thread.
- By implementing Runnable interface.
- By implementing Callable interface.
Check this post Difference Between Runnable And Callable in Java to know the differences between Runnable and Callable in Java.
But what if you have a Runnable and you want to convert it into a Callable in Java at runtime. Executors class in Java provides utility methods to do that conversion.
- callable(Runnable task)- Returns a Callable object that, when called, runs the given task and returns null.
- callable(Runnable task, T result)- Returns a Callable object that, when called, runs the given task and returns the given result.
Converting Runnable to Callable in Java
1- Using the first method - callable(Runnable task)
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..");
}
}
Output
Running task.. Result- null
2- Using the second method- callable(Runnable task, T result)
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..");
}
}
Output
Running task.. Result- From callable
That's all for the topic How to Convert a Runnable into a Callable in Java. If something is missing or you have something to share about the topic please write a comment.
You may also like
No comments:
Post a Comment