1.继承Thread类来创建线程
public class Thread1 extends Thread{
private int i;
@Override
public void run() {
for( ;i<100 ;i++) {
System.out.println(getName() + ":" + i);
}
}
}
2.实现Runnable接口创建线程
public class Thread2 implements Runnable{
private static int i;
@Override
public void run() {
for( ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
public static void main(String[] args) {
for( ;i < 100; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
if(i == 20) {
new Thread(new Thread2(),"Thread2").start();
new Thread(new Thread2(),"Thread3").start();
}
}
}
}
3.使用Callable接口及FutureTask类
public class Thread3{
private static int i;
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
FutureTask task = new FutureTask(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
for( ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
return 1;
}
});
Thread t3 = new Thread(task,"使用Callable接口创建的线程");
t3.start();
System.out.println(task.get());
}
}
总结(优劣势):
由于Java语言是单继承,所以使用继承Thread类方式就不能继承其他类,而通过后面这两种实现接口的方式还可以继承其他类,没有局限性,不过如果需要访问当前线程,必须使用Thread.currentThread()方法,而通过继承Thread创建的线程可以直接通过this访问