第一种方式:继承Thread类,重写run方法
public class Thread01 extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
}
public class ThreadTest01 {
public static void main(String[] args) {
Thread t1 = new Thread01();
//启动线程需要使用start方法,不能直接调用run方法
t1.start();
}
}
第二种方式:实现Runnable接口,实现run方法
public class Thread02 implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
}
public class ThreadTest01 {
public static void main(String[] args) {
Thread t2 = new Thread(new Thread02());
//启动线程需要使用start方法,不能直接调用run方法
t2.start();
}
}
第三种方式:实现Callable接口,实现call方法
public class Thread03 implements Callable<String> {
@Override
public String call() throws Exception {
return "有返回值的线程";
}
}
public class ThreadTest01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Thread03 t3 = new Thread03();
FutureTask<String> ft = new FutureTask(t3);
Thread t = new Thread(ft);
//启动线程需要使用start方法,不能直接调用run方法
t.start();
//可以获取返回值
System.out.println(ft.get());
}
}