多线程的第三种实现方式

来源:互联网 发布:八叉树算法详解 编辑:程序博客网 时间:2024/05/29 19:52

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();    }}
原创粉丝点击