import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Book {
public Book() {
ArrayList<FutureTask<String>> mFutures = new ArrayList<FutureTask<String>>();
for (int i = 0; i < 6; i++) {
TestThread thread = new TestThread(i);
FutureTask<String> futureTask = new FutureTask<>(thread);
mFutures.add(futureTask);
new Thread(futureTask).start();
}
for (FutureTask<String> task : mFutures) {
try {
System.out.println(task.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
private class TestThread implements Callable<String> {
private int id;
public TestThread(int id) {
this.id = id;
}
@Override
public String call() {
System.out.println("线程:" + id + " -> 运行...");
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程:" + id + " -> 结束.");
return "返回的字符串" + id;
}
}
public static void main(String[] args) {
new Book();
}
}
Log output:
线程:2 -> 运行...
线程:3 -> 运行...
线程:0 -> 运行...
线程:5 -> 运行...
线程:4 -> 运行...
线程:1 -> 运行...
线程:0 -> 结束.
线程:5 -> 结束.
线程:4 -> 结束.
线程:1 -> 结束.
线程:2 -> 结束.
线程:3 -> 结束.
返回的字符串0
返回的字符串1
返回的字符串2
返回的字符串3
返回的字符串4
返回的字符串5