创建线程的三种方法 | 张扎瓦的博客

创建线程的三种方法

Java中创建线程的三种写法


继承Thread类,重写run()方法

1
2
3
4
5
6
7
8
9
10
11
public class ThreadTest1 extends Thread {
@Override
public void run() {
System.out.println("线程启动了");
}

public static void main(String[] args) {
ThreadTest1 threadTest1 = new ThreadTest1();
threadTest1.start(); // 启动线程
}
}

这种实现方式的缺点是一个类只能继承一个父类,类的可扩展性差。

实现Runnable接口,重写run()方法

1
2
3
4
5
6
7
8
9
10
11
12
public class ThreadTest2 implements Runnable {

@Override
public void run() {
System.out.println("线程启动了");
}

public static void main(String[] args) {
Thread thread = new Thread(new ThreadTest2());
thread.start(); // 启动线程
}
}

这种写法就比第一种的扩展性要好。毕竟Java是可以多实现的。

当然,也可以使用匿名内部类的方式进行简写,写法如下:

1
2
3
4
5
6
7
8
9
10
11
12
public class ThreadTest3 {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("线程启动了");
}
};

thread.start();
}
}

如果你用的JDK的版本是8以上的,还可以使用lambda表达式再次进行简写:

1
2
3
4
5
6
7
public class ThreadTest4 {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("线程启动了");
}).start();
}
}

实现Callable接口,重写call()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ThreadTest5 implements Callable<String> {

@Override
public String call() throws Exception {
System.out.println("启动线程");
return "thread";
}

public static void main(String[] args) {
FutureTask<String> task = new FutureTask<>(new ThreadTest5());
Thread thread = new Thread(task);
thread.start();
}
}
如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)