1: 我们在学校学习的线程启动方式有2种:
第一种:实现Runable接口,重写run方法
第二种:继承Thread类,重写run方法
如下:
public class Test implement Runnable{
@Ovveride
public void run(){
//操作,任务执行
}
}
public class Test2 extend Thread{
@Override
public void run(){
//任务操作
}
}
2:对于上面的例子的启动一个线程:
Test test = new Test();
Thread t = new Thread(test);
t.start();
Test2 test2 = new Test2();
test2.start();
3: 推荐的,较优的启动线程的方法,是使用Executors相关的方法去启动线程
比如: 对于实现了Runnable接口的类,去启动线程
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(test);
对于继承了Thread接口的类,去启动线程
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(test2);
3:为啥要使用Executors去启动线程,而不去用本身的?
首先:2种方式都可以启动线程,但是Executors的优选方法。
其次:老式的启动方式相当于客户端直接启动,而通过Executors方式相当于一个客户端和任务执行的一个中间层,用它来帮你管理Thread对象。
网友评论