ゞ沉默是金ゞ

鱼离不开水,但是没有说不离开哪滴水.
posts - 98,comments - 104,trackbacks - 0
Future<T> submit(Callable<T> c)
Today in next part of the series we will talk about submission of callable task via executor service. 

As per JAVA version 6.0, ExecutorService Interface has following method -
Future< T >  submit( callable c )
  1. Submits a Callable task for execution and returns a Future representing that task computation.
  2. Future< T > will return T on successful completion of the process, otherwise result will not be T.
Lets start with Callable task - As we  know that Callable<T> interface has following method - public T call()
So when we say - ExecutorService.submit(Callable Task) --> It starts a new stack starting with call method of callable task, as call method can return T so does future object. Due to this reason the signature of submit(Callable c) is Future< T >.
T --> means anything that extends Object.
package com.jovialjava.blog.threads;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class CallableExample {

    
private static final ExecutorService executorPool=Executors.newFixedThreadPool(2);
    
    
public static void main(String[] args) {
        CallableTask_1 task_1 
= new CallableTask_1();
        CallableTask_2 task_2 
= new CallableTask_2();
        
        
/**
         * Submit the first task
         
*/
        Future
<Boolean> fut_1 = executorPool.submit(task_1);
        Future
<Boolean> fut_2 = executorPool.submit(task_2);
        
        
try{
            
if(fut_1.get()){
                System.out.println(
"TASK 1 completed SUCCESSFULLY");
            }
            
if(fut_2.get()){
                System.out.println(
"TASK 2 completed SUCCESSFULLY");
            }
        }
catch(ExecutionException e){            
            System.out.println(e.getMessage());
        }
catch(InterruptedException e){
            System.out.println(e.getMessage());
        }
finally{
            
/**====VERY IMPORTANT===
             * This is required to stop the executor pool to
             * stop accepting new request.
             
*/
            executorPool.shutdown();
        }

    }

    
    
/**
     * This task will complete successfully
     
*/
    
public static class CallableTask_1 implements Callable<Boolean>{
        
public Boolean call()throws NullPointerException{
            System.out.println(
"Hi, Inside Callable Task 1");
            
return true;
        }        

    }
    
    
/**
     * This task will result in error.
     
*/
    
public static class CallableTask_2 implements Callable<Boolean>{
        
public Boolean call()throws NullPointerException{
            System.out.println(
"Hi, Inside Callable Task 2");
            
throw new IllegalStateException("Callable Task Exception");
        }        

    }
}
posted on 2012-08-06 10:35 ゞ沉默是金ゞ 阅读(779) 评论(0)  编辑  收藏 所属分类: Java SE

只有注册用户登录后才能发表评论。


网站导航: