Runnable和Callable

Runnable:接口,定义了抽象方法run()。

实现Runnable接口创建多线程的步骤:(最本质创建线程方法)

1)自定义类实现Runnable接口,在类中实现run()方法

2)创建自定义类的对象。

3)创建线程Thread对象,并把自定义类对象作为构造器参数闯入。

4)通过线程Thread对象调用start()方法,启动线程,运次run()方法。

说明:

1)如果通过自定义类继承Thread方式实现多线程,自定义类重写run(),然后创建自定义类对象调用start(),进而调用了run()。

2)Thread类本身实现了Runnable接口,Thread类自然实现了抽象方法run(),如下:

@Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

target是Runnable接口实现类的对象:
public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }

3)Thread类是实现了Runnable接口的,而我们自定义类实现了Runnable接口和其抽象方法run(),创建了自定义类对象后还把其作为Thread构造器参数传入,就是因为上面的Thread方法。

    

Callable:接口,定义抽象方法call(),此方法有返回值,异常机制。

实现Callable接口创建多线程的步骤;

1)创建一个实现callable接口的实现类,在此实现类中实现call(),把线程需要执行的操作声明在其中。

2)创建上面实现类对象,并把此对象作为FutureTask类构造器参数,创建FutureTask类对象

3)创建Thread类对象,把FutureTask对象作为构造器参数传入,然后调用start()

说明:

1)Runnable和Callable是同一级别,两者都有各自抽象函数:run()和call(),后者函数更强大,因为有返回值、可以抛出异常和支持泛型。

2)FutureTask实现了RunnableFuture接口;RunnableFuture接口继承Runnable接口。代码如下:

public class FutureTask<V> implements RunnableFuture<V>

public interface RunnableFuture<V> extends Runnable, Future<V> 

FutureTask间接实现了Runnable接口。

3)待续。。

 

创建多线程的第三种方法:继承Thread类:

1)创建类继承thread类,并具体实现run()方法

2)创建上面类的对象,通过对象调用start():开启新线程,执行run()方法体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值