1.实现Runnable接口,重载run(),无返回值
public class ThreadRunnable implements Runnable {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread() + ":" + i);
}
}
}
public class ThreadMain {
public static void main(String[] args)
{
ThreadRunnable threadRunnable = new ThreadRunnable();
未完待续
}
}
2.继承Thread类,复写run()
使用时通过调用Thread的start()(该方法是native),再调用创建线程的run(),不同线程的run方法里面的代码交替执行。
不足:由于java为单继承,若使用线程类已经有个父类,则不能使用该方式创建线程。
public class ThreadEx extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread() + ":" + i);
}
}
}
public class ThreadMain {
public static void main(String[] args)
{
ThreadEx threadEx = new ThreadEx();
threadEx.start();
}
}
3.实现Callable接口,通过FutureTask/Future来创建有返回值的Thread线程
补充:与实现Runnable接口类似,都是实现接口,不同的是该方式有返回值,可以获得异步执行的结果。
延伸:FutureTask是类,Future是接口。
import java.util.concurrent.Callable;
public class ThreadCallable implements Callable {
public Object call() throws Exception {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread() + ":" + i);
}
return "succeed";
}
}
4.使用Executors创建ExecutorService,入参Callable或Future
补充:适用于线程池和并发
未完待续,补充源码