1.实现步骤
1)创建一个线程池
2)在线程池的submit方法中传入Callable对象,然后该方法会返回一个Future的对象。
3)Future的get()方法即可获得线程中的返回值。
这种多线程会阻塞主线程的,既然会阻塞主线程,那我为什么要再开一个线程去执行呢,还不如直接在主线程执行就好。但是这种是局限于在一个线程时,如果需要同时执行多个线程,等待多个线程返回结果时,在主线程中是不能实现这种功能的。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class DateFormat {
public static void main(String[] args) {
System.out.println("----program start----");
List<Future<String>> list = new ArrayList<Future<String>>();
ExecutorService pool = Executors.newFixedThreadPool(2);
Future<String> future1 = pool.submit(new MyCallable("A"));
list.add(future1);
Future<String> future2 = pool.submit(new MyCallable("B"));
list.add(future2);
try {
for (Future<String> future : list) {
System.out.println(future.get());
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("-----program end----");
}
}
class MyCallable implements Callable<String> {
private String string;
public MyCallable(String string) {
this.string = string;
}
@Override
public String call() throws Exception {
Thread.sleep(2000); //让子线程休眠2秒,会发现子线程会阻塞主线程。
return string + "===>" + Thread.currentThread().toString();
}
}