一、Runnable接口
⑴实现Runnable,实现run()方法
⑵新建Thread类对象,调用Thread.start()方法
class RunnalbeTest implements Runnable{
@Override
public void run() {
System.out.println("实现Runnable.run()");;
}
public static void main(String[] args) {
RunnalbeTest r = new RunnalbeTest();
Thread t = new Thread(r);
t.start();
}
}
二、Callable+FutureTask
⑴实现Callable,实现call()方法
⑵创建FutureTask
⑶新建Thread类对象,调用start()方法
class CallableTest implements Callable<String> {
@Override
public String call() {
return "实现Callable.call()";
}
public static void main(String[] args) {
try {
CallableTest call = new CallableTest();
FutureTask futureTask = new FutureTask(call);
Thread t = new Thread(futureTask);
t.start();
System.out.println(futureTask.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、Thread类
⑴继承Thread,重写run()方法
⑵新建子类对象调用start()方法
Thread实现了Runnable接口,提供 Thread()和Thread(Runnable target)构造方法,所以本质上和第一种是一样的。
class ThreadTest extends Thread{
@Override
public void run() {
System.out.println("重写Thread.run()");;
}
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
t.start();
}
}
四、new Thread Lamad表达式方式
JDK8新特性Lamad,让创建线程代码看起来更简洁。但本质与实现Runnable一样。
class ThreadLamadTest{
public static void main(String[] args) {
Thread t = new Thread(()->{
System.out.println("ThreadLamadTest");
});
t.start();
}
}
五、Executors线程池启动
Executors线程池启动线程,本质上也是Runnable接口的方式。
class ExecutorTest{
public static void main(String[] args) {
ExecutorTest et = new ExecutorTest();
et.executor1();
et.executor2();
}
public void executor1(){
ExecutorService executorService = Executors.newCachedThreadPool();
RunnalbeTest r = new RunnalbeTest();
executorService.execute(r);
executorService.shutdown();
}
public void executor2(){
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(()->{
System.out.println("线程池lamad表达式启动.");
});
executorService.shutdown();
}
}