1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3.通过Callable和FutureTask创建线程
4.通过线程池创建线程
前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果
后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放在Object对象中
方式一
Thread t1=new Thread("线程1"){
@Override
public void run() {
for (int i = 1; i < 100; i++) {
System.out.println("[线程1]"+i);
}
}
};
t1.start();
方式二
public static void main(String[] args) {
EmailTask emailTask=new EmailTask();
Thread t1=new Thread(emailTask,"线程T1");
Thread t2=new Thread(emailTask,"线程T2");
Thread t3=new Thread(emailTask,"线程T3");
t1.start();
t2.start();
t3.start();
}
}
//父类
abstract class Task{
pub