一次搞懂Runnable和Callable

一次搞懂Runnable和Callable一 RunnableRunn 即可运行的 实例如下 package org thread

大家好,欢迎来到IT知识分享网。

一次搞懂Runnable和Callable

一、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

(0)
上一篇 2025-02-07 14:33
下一篇 2025-02-07 15:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信