java入门+进阶系列导航
前言
创建线程的三种方式
二、实现
1.继承Thread类
package com.thread.newthread;
public class Task1 extends Thread {
public void run() {
System.out.println(Thread.currentThread().getName()+" 任务已执行");
}
}
package com.thread.newthread;
public class Index1{
public static void main(String[] args) {
Task1 task1 = new Task1();
task1.start();
}
}
2.实现Runnable接口
package com.thread.newthread;
public class Task2 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" 任务已执行");
}
}
package com.thread.newthread;
public class Index2 {
public static void main(String[] args) {
Task2 task2 = new Task2();
//需要使用thread包装下才能运行
Thread thread = new Thread(task2);
thread.start();
}
}
3.实现Callable接口
package com.thread.newthread;
import java.util.concurrent.Callable;
public class Task3 implements Callable<String> {
public String call() throws Exception {
System.out.println(Thread.currentThread().getName()+" 任务已执行");
return "成功";
}
}
package com.thread.newthread;
import java.util.concurrent.FutureTask;
public class Index3 {
public static void main(String[] args) {
Task3 task3 = new Task3();
//使用FutureTask包装实现了Callable接口的类
FutureTask<String> futureTask = new FutureTask<String>(task);
//使用thread包装实现futureTask对象
Thread thread = new Thread(futureTask);
//启动线程
thread.start();
//获取结果
try {
String result = futureTask.get();
System.out.println("获取返回的结果:"+result);
} catch (Exception e) {
e.printStackTrace();
}
}
}