大家好,欢迎来到IT知识分享网。
一、Runnable
Runnable,即可运行的。实例如下:
package org.thread.demo;
class MyThread extends Thread{
private String name;
public MyThread(String name) {
super();
this.name = name;
}
public void run(){
for(int i=0;i<10;i++){
System.out.println(“线程开始:”++”,i=”+i);
}
}
}
package org.thread.demo;
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread(“线程a”);
MyThread mt2=new MyThread(“线程b”);
mt1.start();
mt2.start();
}
}
Runnable接口的设计,本身就是想让一个类,实现这个可运行的接口,并传递给一个Thread去执行。当一个Thread执行run方法时,本质上是执行Runnable的run方法。
二、Callable
Callable,即可调用的,
在金融领域,也是可提前兑付的意思。
以VC++6.0为例,该技术实现的步骤如下:
1.将\ITT\IDL71\external\include目录下的idl_export.h头文件,添加到VC工程中
2.工程→设置→连接 中的对象/库模块 中 添加idl.lib
3.添加Library files 安装路径\ITT\IDL71\BIN\BIN.X86
4.系统变量path中添加IDL的安装路径\ITT\IDL71\BIN\BIN.X86
5.进行初始化IDL_Win32Init(0,handle,NULL,0)
6.执行IDL命令行IDL_ExecuteStr(“restore,‘satstretch.sav’”)
7.IDL_Cleanup(true)
Callable接口的设计,就是想让一段逻辑被调用后,返回一个结果,并支持抛出异常。这个从JDK1.5开始引入的概念,就是为了补充Runnable产生的。
三、不同点
1、Runnable只执行逻辑,没有返回值;Callable执行逻辑之后,返回执行结果,是个泛型,和Future、FutureTask配合可以用来获取异步执行的结果;
2、Callable接口的call()方法允许抛出异常;Runnable的run()方法异常只能在内部消化,不能往上继续抛;
3.Runnable的实现类可以通过构造方法直接传递给一个Thread,并执行;而Callable只能借助Future去执行并获取返回结果。
4.并发控制:Callable接口可以使用Future接口来控制多线程的并发运行,可以获取线程的执行结果、取消线程的执行、等待线程执行完毕等操作。而Runnable接口没有这些功能。
注:Callalbe接口支持返回执行结果,需要调用FutureTask.get()得到,此方法会阻塞主进程的继续往下执行,如果不调用不会阻塞。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/169378.html