1.继承Thred类
创建一个子类,继承Thred类,没有返回值,重写run方法。
public class Demo01 {
//继承Thread类,无返回值
public static class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "在运行!");
}
}
}
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "在运行!");
}
}
}
2.实现Runnable接口
无返回值,重写run方法
public class Demo02 {
//实现Runnable接口,无返回值
public static class MyThread implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "在运行!");
}
}
}
public static void main(String[] args) {
MyThread mt = new MyThread();
Thread t = new Thread(mt);
t.start();
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "在运行!");
}
}
}
3.实现Callable接口
有返回值,重写call方法
public class Demo03 {
//实现Callable接口,有返回值
public static class MyThread implements Callable {
public String call() {
return "hello";
}
}
public static void main(String[] args) {
MyThread mt = new MyThread();
FutureTask futureTask = new FutureTask(mt);
Thread t = new Thread(futureTask);
t.start();
try {
System.out.println(futureTask.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.线程池创建
性能好,可以复用
public class Demo04 {
public static ExecutorService executorService = Executors.newFixedThreadPool(5);
static class Task implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("hello");
return "0";
}
}
public static void main(String[] args) {
Task task = new Task();
executorService.submit(task);
}
}