Runnable , Callable 区别
2017-04-22 13:38
99 查看
编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有三种方法,Thread,Runnable,Callable.
Runnable和Callable的区别是,
(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以
(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。
package com.example.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class RunableTest {
public static void main(String[] args) {
int taskSize = 3;
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
Runnable run = new Runnable() {
@Override
public void run() {
for(int i=0; i<10; i++){
System.out.println(i);
}
}
};
//方法一:
//调用submit 会执行Runnable 的run方法
Future<?> f = pool.submit(run);
//无返回值
if(f.isDone()){//判断是否执行完毕
pool.shutdown();
}
//方法二:
new Thread(run).run();
}
}
Runnable和Callable的区别是,
(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以
(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。
package com.example.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class RunableTest {
public static void main(String[] args) {
int taskSize = 3;
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
Runnable run = new Runnable() {
@Override
public void run() {
for(int i=0; i<10; i++){
System.out.println(i);
}
}
};
//方法一:
//调用submit 会执行Runnable 的run方法
Future<?> f = pool.submit(run);
//无返回值
if(f.isDone()){//判断是否执行完毕
pool.shutdown();
}
//方法二:
new Thread(run).run();
}
}
相关文章推荐
- Callable接口与Runnable接口区别
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- java多线程—Runnable、Thread、Callable区别
- Java Callable接口和Runnable接口的区别
- Runnable和Callable的区别
- android callable与runnable的区别
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Runnable和Callable的区别
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- 多线程相关 Thread、Runnable、Callable、Futrue类关系与区别
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中Runnable和Thread以及Callable的区别
- Callable,Runnable的区别及用法
- Callable和Runnable的区别
- Runnable与Callable的区别
- Java中的Runnable、Callable、Future、FutureTask的区别
- 在线程池使用Callable和Runnable的区别以及如何关闭线程
- Runnable和Callable接口的区别
- Java中的Runnable、Callable、Future、FutureTask的区别和CompletionService的使用场景