多线程
1 多线程创建方式
1.1 继承Thread类,重写run()方法
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("Running in thread: " + Thread.currentThread().getName());
}
public static void main(String[] args) {
MyThread t = new MyThread();
t.start(); // 启动线程
}
}
1.2 实现Runnable接口,重写run()方法
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Running in thread: " + Thread.currentThread().getName());
}
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start(); // 启动线程
}
}
1.3 实现Callable接口,重写call()方法
能够获取返回结果
在Java 5中引入了一种新的创建线程的方式,即使用FutureTask结合Callable接口。这种方式允许从线程中返回一个结果,并且可以通过Future接口来获取这个结果。
步骤
- 实现Callable接口:
-
- 创建一个类实现Callable接口。
-
- 实现call方法,该方法的返回值就是线程执行的结果。
- 创建FutureTask对象:
-
- 使用Callable对象创建一个FutureTask对象。
- 创建并启动线程:
-
- 使用FutureTask对象创建一个Thread对象。
-
- 调用Thread对象的start方法来启动线程。
- 获取线程返回值:
-
- 调用FutureTask对象的get方法来获取线程执行的结果。
-
- get方法会阻塞当前线程直到Callable的call方法执行完毕。
public class FutureTaskExample {
public static void main(String[] args) throws Exception {
int n = 100;
// 创建Callable对象
MyCallable myCallable = new MyCallable(n);
// 创建FutureTask对象
FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
// 创建Thread对象并将FutureTask作为run方法的参数
Thread thread = new Thread(futureTask);
// 启动线程
thread.start();
// 获取线程的返回值
Integer result = futureTask.get();
System.out.println("The sum is: " + result);
}
}
class MyCallable implements Callable<Integer>{
private final int n;
public MyCallable(int n) {
this.n = n;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += i;
}
return sum;
}
}