2012-03-14 42 views
0

爲了保持一個ApnsService活着,我創建了一個ThreadPoolExecutor來保持線程發送推送。 這裏是工人的代碼:JavaApns無法在ThreadPoolExecutor中使用?

公共靜態類PushWorker實現Runnable {

private static final Logger log = Logger.getLogger(PushWorker.class); 

    private String token; 
    private String alert; 
    private int badge; 
    private String sound; 
    private ApnsService service; 

    public PushWorker(ApnsService srv, String t, String a, int b, String s){ 
     token = t; 
     alert = a; 
     badge = b; 
     sound = s; 
     service = srv; 
    } 
    @Override 
    public void run() { 


     PayloadBuilder payloadBuilder = APNS.newPayload(); 
     payloadBuilder.sound(sound); 
     payloadBuilder.badge(badge); 

     payloadBuilder.alertBody(alert); 


     String payload = payloadBuilder.build(); 
        service.push(token, payload); 

    } 
} 

當我創建了一個工人,在一個線程池執行它:

的ThreadPoolExecutor池=新的ThreadPoolExecutor(corePoolSize ,maximumPoolSize,keepAliveTime,TimeUnit.SECONDS,queue);

pool.execute(worker);

程序終止於:PayloadBuilder payloadBuilder = APNS.newPayload();並沒有任何錯誤或例外。但是,它可以工作,如果在以下方式:

PushWorker worker = new PushWorker(service,token,alert,badge,null);

worker.run();

我不知道爲什麼線程終止在線程池...有沒有人有同樣的問題?

回答

0

嘗試使用

try { 
    Future result = pool.submit(worker) 
    result.get() 

} catch (ExecutionException e) { 
    // actual exception in e.getCause() 
} 

代替