Java之Callable和Runnable
【摘要】 1 接口定义
1) Callable接口
public interface Callable<V> { V call() throws Exception;}
2) Runnable接口
public interface Runnable { public abstract void run();}
2 不同点...
1 接口定义
1) Callable接口
-
public interface Callable<V> {
-
V call() throws Exception;
-
}
2) Runnable接口
-
public interface Runnable {
-
public abstract void run();
-
}
2 不同点和相同点
1)相同点
都是接口,都可编写多线程程序,都是调用Thread.start()启动线程
2)不同点
Callable可以返回执行结果,是个泛型,与Future、FutureTask配合可以通过FutureTask.get()获取异步执行的结果,但是Runnable不可以。
Callable里面有取消这个任务,而且异常可以外抛,但是Runnable异常只能内部run消化。
FutureTask.get()得到异步执行的结果,此方法会阻塞主进程的继续往下执行。
3 Callable测试用例
-
import java.util.Random;
-
import java.util.concurrent.Callable;
-
import java.util.concurrent.ExecutionException;
-
import java.util.concurrent.FutureTask;
-
-
public class TestCallableAndFuture {
-
public static void main(String[] args) {
-
-
//构建Callable
-
Callable<String> callable = new Callable<String>() {
-
@Override
-
public String call() throws Exception {
-
Thread.sleep(2000);
-
return "chenyu callable finish";
-
}
-
};
-
-
//构建FutureTask
-
FutureTask<String> futureTask = new FutureTask<>(callable);
-
-
//运行线程
-
new Thread(futureTask).start();
-
-
try {
-
System.out.println("chenyu begin");
-
System.out.println(futureTask.isDone());
-
//futureTask.cancel(true);
-
if (!futureTask.isCancelled()) {
-
System.out.println(futureTask.get());
-
System.out.println(futureTask.isDone());
-
System.out.println("chenyu end");
-
} else {
-
System.out.println("the thread is cancel");
-
}
-
-
} catch (InterruptedException e) {
-
e.printStackTrace();
-
} catch (ExecutionException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
4 运行结果
如果注释掉// futureTask.cancel(true)运行结果如下
-
chenyu begin
-
false
-
chenyu callable finish
-
true
-
chenyu end
如果不注释掉futureTask.cancel(true)运行结果如下
-
chenyu begin
-
false
-
the thread is cancel
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/103077029
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)