创建和运行线程的几种方式
方式一:
使用Thread
@Test
public void test1(){
Thread thread = new Thread(){
@Override
public void run() {
System.out.println("hello1");
}
};
thread.start();
}
方式二:
使用Runnable+Thrad
@Test
public void test2(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("hello2");
}
};
Thread thread = new Thread(runnable);
thread.start();
}
方式三:
使用FutureTask+Thread
@Test
public void test3()throws Exception{
FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("hello3");
return 100;
}
});
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get());
}
区别:
第一种方式就是直接使用Thread来创建一个子线程,业务代码在run方法中编写,这没什么好说的
第二种方式相比于第一种方式的话就是把线程和任务分开了,还有一点就是避免了继承Thread类的单继承的局限性
第三种方式,他拥有第二种方式的优点,同时,当我们线程执行完以后,可以返回一个结果。这种方式一般用来处理有发挥结果的情况