1.3 创建线程的四种方式

1 Runnable 和 Callable 的相同点有:

1 都是实现多线程编程的接口;
2 都要实现一个方法,用于执行多线程任务:Runnable 实现 run() 方法,Callable 实现 call() 方法;
3 都用于创建线程,从而实现多线程编程;

2 Runnable 和 Callable 的不同点有

1 抛出异常的方式不同:Runnable 的 run() 方法只能抛出运行时异常,而 Callable 的 call() 方法可以抛出受检异常;
2 返回值类型不同:Runnable 的 run() 方法没有返回值,而 Callable 的 call() 方法返回一个泛型类型的结果;
3 适用场景不同:Runnable 用于执行没有返回值的异步任务,Callable 用于执行有返回值的异步任务;
4 获取返回执行结果的方式不同:Callable 的 call() 方法可以通过调用FutureTask.get()来获取执行结果,而 Runnable 不能返回执行结果。

3 线程的 run()和 start()有什么区别?

1 run() 方法是线程要执行的代码块,是线程体。
start() 方法用于启动子线程。

2 start() 方法被主线程调用后,会启动子线程,子线程进入就绪态,分配cpu后会自动调用 run() 方法中的代码块,接着主线程会直接继续执行start()方法后的代码,不用等待run方法体代码执行完毕。
如果直接调用 run() 方法,那就相当于在主线程中执行了一个普通的方法,并没有启动新的线程,则必须等待run()方法执行完毕才能执行下面的代码

3 run() 可以重复调用,而 start() 只能调用一次,否则会抛出 IllegalThreadStateException 异常。

总的来说,run() 方法是线程体,定义了线程要执行的任务,而 start() 方法则启动一个子线程,调用run() 方法执行任务。

4 什么是 Callable 和 Future?

Callable是实现多线程编程的接口,只有一个call()方法,用于执行异步任务并返回一个泛型对象,可以通过Future获取线程执行的结果。

Future是一个接口,用于表示一个异步任务计算的结果,常见的Future接口的实现类有FutureTask、CompletableFuture等。
Future对象,可以通过get()方法来获取异步任务的执行结果。如果任务还没有执行完成,get()方法会阻塞,直到任务执行完成并返回结果。

5 什么是 FutureTask

FutureTask是一个类,它实现了Future和Runnable接口,用于异步执行任务并获取任务执行结果。
由于 FutureTask 也是Runnable 接口的实现类,所以 FutureTask 也可以放入线程池中。

FutureTask的构造函数可以接受一个 Callable 的实现类对象,对这个异步运算的任务可以执行等待获取get()、判断是否已经完成isDone()、取消任务cancel()等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值