创建方式
1、继承thread类
Thread t = new Thread(){
@Override
public void run() {
}
};
t.start();
2、实现Runnable接口
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
}
}
});
t1.start();
3、实现Callable接口
ExecutorService pool = Executors.newCachedThreadPool();
Future future = pool.submit(new Callable() {
public Object call() throws Exception {
return null;
}
});
比较
Thread VS Runnable
- java不支持多继承,允许实现多个接口。Thread是类,Runnable是接口
- Runnable适合于资源的共享(多个Thread使用相同的Runnable)
- public class Thread extends Object implements Runnable. Thread是Runnable接口的子类
Runnable VS Callable
- Callable的 call() 方法可以返回Future类型结果和抛出异常,而Runnable的run()方法没有这些功能
- Callable通常利用ExecutorService的submit方法去启动call方法,Runnable还可以通过Thread的run方法启动run方法