Future和FutureTask及線程池

Future

 用future時,future作爲線程池的返回值,線程池的入參爲new Callable();

//定義線程池
        ExecutorService executorService = Executors.newFixedThreadPool(30);

        //1.用Future
        List<Future<Integer>> futures = new ArrayList<Future<Integer>>();
        String mainThreadName = Thread.currentThread().getName();
        for(int i=0; i<10; i++){
            Future<Integer> future = executorService.submit(new Callable<Integer>(){
                public Integer call(){
                    String oldThreadName = Thread.currentThread().getName();
                    try{
                        System.out.println("oldThreadName==="+oldThreadName);
                        String newThreadName = mainThreadName + "===" + oldThreadName;
                        System.out.println("newThreadName==="+newThreadName);

                        Thread.currentThread().setName(newThreadName);
                        Thread.sleep(1 * 1000);
                        return 1;
                    }catch(Exception e){
                        return 1;
                    }finally{
                      //  Thread.currentThread().setName(oldThreadName);
                    }
                }
            });

            futures.add(future);
        }

        for(int j=0; j<10; j++ ){
            try {
                System.out.println(futures.get(j).get(25, TimeUnit.SECONDS));
            }catch (Exception e){
                System.out.println("超時了");
            }

        }

FutureTask:

用個FutrueTask時,構造FutureTask futureTask = new FutureTask(new Callable());

exe.submit(futureTask);

futureTask.get();

        List<FutureTask<Integer>> tasks = new ArrayList<FutureTask<Integer>>();


        for(int i=0;i<10;i++){
            final Integer num = i;
            FutureTask<Integer> task = new FutureTask(new Callable<Integer>(){
                public Integer call(){
                    return num;
                }
            });
            executorService.submit(task);
            tasks.add(task);
        }

        for(int j=0; j<10;j++){
            try {
                System.out.println(tasks.get(j).get());

            }catch (Exception e){

            }
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章