1.继承Thread方法
第一步 创建一个Thread类的子类
第二步 在Thread的子类中重写run方法,设置线程任务(线程开启要干什么)
第三步 创建Thread类的子类对象
第四步 调用Thread类中的方法start方法,执行run方法
public class MyThread01 extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
public class demo01Thread {
public static void main(String[] args) {
MyThread01 thread01=new MyThread01();
thread01.start();
}
}
运行结果:
Thread-0-->0
Thread-0-->1
Thread-0-->2
Thread-0-->3
Thread-0-->4
Thread-0-->5
Thread-0-->6
Thread-0-->7
Thread-0-->8
Thread-0-->9
2.实现Runnable接口
第一步 创建一个Runnable类的实现类
第二步 在实现类中重写Runnable接口的run方法,设置线程任务(线程开启要干什么)
第三步 创建Runnable接口的实现类对象
第四步 创建Thread类对象,构造方法中传递Runnable接口的实现类对象
第五步 调用Thread类中的start方法,开启新线程执行run方法
//1.创建一个Runable解口的实现类
public class RunnableImpl implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}
实现类
public class demo02Thread {
public static void main(String[] args) {
RunnableImpl run=new RunnableImpl();
Thread thread = new Thread(run);
Thread thread1 = new Thread(run);
}
}
运行结果:
Thread-0-->0
Thread-1-->0
Thread-0-->1
Thread-1-->1
Thread-0-->2
Thread-1-->2
Thread-0-->3
Thread-1-->3
Thread-0-->4
Thread-1-->4
3.实现Callable接口和Future创建线程
创建Callable接口的实现类CallableThread,实现call()方法,并且有返回值。Callable接口是一个带泛型的接口,泛型的类型就是线程返回值的类型。实现Callable接口中的call()方法,方法的返回类型与泛型的类型相同。
public class Main {
public static void main(String[] args){
MyThread3 th=new MyThread3();
//使用Lambda表达式创建Callable对象
//使用FutureTask类来包装Callable对象
FutureTask<Integer> future=new FutureTask<Integer>(
(Callable<Integer>)()->{
return 5;
}
);
new Thread(task,"有返回值的线程").start();//实质上还是以Callable对象来创建并启动线程
try{
System.out.println("子线程的返回值:"+future.get());//get()方法会阻塞,直到子线程执行结束才返回
}catch(Exception e){
ex.printStackTrace();
}
}
}