线程创建方式
# 线程创建方式
Java中创建线程主要有三种方式,分别为继承Thread类、实现Runnable接口、实现Callable接口。
# 继承Thread类
继承Thread类,重写run()方法,调用start()方法启动线程
public class ThreadTest {
public static class MyThread extends Thread {
@Override
public void run() {
System.out.println("hello");
}
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 实现 Runnable 接口
实现 Runnable 接口,重写run()方法
public class RunnableTask implements Runnable {
public void run() {
System.out.println("Runnable!");
}
public static void main(String[] args) {
RunnableTask task = new RunnableTask();
new Thread(task).start();
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
实际上Thread中的run方法不重写的话,逻辑就是调用Runnable 的run方法。
# 实现Callable接口
实现Callable接口,重写call()方法,这种方式可以通过FutureTask获取任务执行的返回值
public class CallerTask implements Callable<String> {
public String call() throws Exception {
return "Hello,i am running!";
}
public static void main(String[] args) {
//创建异步任务
FutureTask<String> task=new FutureTask<String>(new CallerTask());
//启动线程
new Thread(task).start();
try {
//等待执行完成,并获取返回结果
String result=task.get();
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 线程池
public static void main(String[] args) {
Runnable task1 = new Task1();
Runnable task2 = new Task2();
new Thread().start();
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.execute(task1);
executorService.execute(task2);
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Java
创建线程有很多种方式啊,像实现Runnable、Callable
接口、继承Thread
类、创建线程池等等,不过这些方式并没有真正创建出线程,严格来说,Java
就只有一种方式可以创建线程,那就是通过new Thread().start()
创建。
而所谓的Runnable、Callable……
对象,这仅仅只是线程体,也就是提供给线程执行的任务,并不属于真正的Java
线程,它们的执行,最终还是需要依赖于new Thread()
……
上次更新: 2024/08/09, 16:07:34