线程的创建与运行
创建线程的方式一共有三种
- 实现Runnable接口的run方法
- 继承Thread类并重写run方法
- 使用FutureTask方式
实现Runnable接口的run方法
/**
* 实现Runnable接口
*
* @author : dxy
* @date : 2020/7/8
*/
public class MyThreadImplRunnable implements Runnable {
/**
* 实现run方法
*/
@Override
public void run() {
System.out.println("我是实现Runnable接口的:my name is " + Thread.currentThread().getName());
}
}
继承Thread类并重写run方法
/**
* 继承thread类。重写run方法
*
* @author : dxy
* @date : 2020/7/8
*/
class MyThread extends Thread {
/**
* 重写run方法
*/
@Override
public void run() {
System.out.println("我是继承thread类的:my name is " + this.getName());
}
}
使用 FutureTask 方式
/**
* 使用 FutureTask 方式
*
* @author : dxy
* @date : 2020/7/9
*/
public class MyThreadImplCallAble implements Callable<String> {
@Override
public String call() throws Exception {
return "我是实现Runnable接口的my name is " + Thread.currentThread().getName();
}
}
结果:
/**
* @author : dxy
* @date : 2020/7/8
*/
public class ThreadOne {
public static void main(String[] args) {
System.out.println("我是主线程:my name is " + Thread.currentThread().getName());
// 创建线程,并调用start方法执行线程
// 继承thread类。重写run方法
new MyThread().start();
// 实现Runnable接口
new Thread(new MyThreadImplRunnable()).start();
// 使用 FutureTask 方式
FutureTask<String> futureTask = new FutureTask<>(new MyThreadImplCallAble());
new Thread(futureTask).start();
try {
String result = futureTask.get();
System.out.println(result);
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
}
输出结果:
我是主线程:my name is main
我是继承thread类的:my name is Thread-0
我是实现Runnable接口的:my name is Thread-1
我是实现Runnable接口的my name is Thread-2
Process finished with exit code 0