方式一:继承Thread类
步骤
- 写一个类继承Thread类,并重写run方法
- 创建该类对象
- 调用该对象的start方法
代码演示
public class MyThread {
public static void main(String[] args) {
//多态
Thread thread = new Thread1();
thread.start();
}
}
class Thread1 extends Thread {
@Override
public void run() {
System.out.println("我是新方法");
}
}
结果
方式二:实现Runnable接口
步骤
- 写一个类实现Runnable接口,并重写run方法
- 创建该类对象
- 创建代理该类对象的Thread类对象(点这里看静态代理模式)
- 调用该对象的start()方法
注:这几步可以直接使用lamda表达式简化。
代码演示
public class MyRunnable {
public static void main(String[] args) {
Runnable r = new Runnable1();
Thread thread = new Thread(r);
thread.start();
//lamda表达式
new Thread(() -> {
System.out.println("我是lamda表达式创建的新线程");
}).start();
}
}
class Runnable1 implements Runnable {
@Override
public void run() {
System.out.println("我是传统方式创建的新线程");
}
}
结果
方式三:实现Callable接口
步骤
- 写一个类实现Callable接口,并重写call()方法
- 创建该类对象
- 创建执行服务
- 提交执行
- 获取结果(会阻塞,可不调用)
- 关闭服务
代码演示
public class MyCallable {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Callable c1 = new Callable1();
Callable c2 = new Callable1();
//创建执行服务
ExecutorService service = Executors.newFixedThreadPool(2);
//提交执行
Future<Boolean> r1 = service.submit(c1);
Future<Boolean> r2 = service.submit(c2);
//获取结果
boolean rs1 = r1.get();
boolean rs2 = r2.get();
System.out.println(rs1);
System.out.println(rs2);
//关闭服务
service.shutdownNow();
}
}
class Callable1 implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
System.out.println("我是被创建的一个新线程");
return true;
}
}