2016-04-14 13 views
1

Google'dan çok iş yaptım ancak FutureTask kullanarak Runnable arabiriminden nasıl değer döndüğünü bulamadım.FutureTask kullanarak Runnable Arabiriminden değer nasıl geri dönülür

FutureTask kullanarak çalıştırma yönteminin sonucunu döndürmem gerekiyor, bunun aynı zamanda Callable Interface kullanılarak arşivlenebildiğini biliyorum, ancak Runnable Interface kullanılarak nasıl yapılabileceğini biliyorum.

FutureTask yapıcısı, dönüş değeri için ikinci parametreyi kabul eder. V sonuç için run() yönteminin sonucunu nasıl atayabilirsiniz. Ben

ExecutorService exec = Executors.newSingleThreadExecutor(new ThreadFactory() { 
    public Thread newThread(Runnable r) { 
     Thread t = new Thread(r); 
     t.setDaemon(true); 
     return t; 
    } 
}); 
Future fs = exec.submit(new Callable() { 
    public Object call() throws Exception { 
     return null;//yourObject 
    } 
}); 
fs.get();//your object 
+1

** Bu parametreyi "run" içinden ayarlayamazsınız. Ama bu tam olarak 'Callable'ın ne için olduğu. Neden "Callable" kullanılmıyor? – immibis

+0

Bu arada, arayüzler bir şey yapmaz. – immibis

+0

Callable arayüzünü kullanabilirim ama ne işe yarar FutureTask (Runnable runnable, V sonuç) – Dave

cevap

0

dönüş değeridir. o "Task Completed Successfully" dönmek zorunda için, gerekir: Eğer Runnable bir sonuç hesaplamak istiyorsanız

FutureTask<String> futureTask=new FutureTask<String>(new Runnable() {   
    @Override 
    public void run() { 
    } 
}, "Task Completed Successfully"); 

Ancak bu, açıkça çok kullanışlı değildir. Bunun yerine, Callable kullanın.

0

çağrınızda null değer kullanıyorum

FutureTask<String> futureTask=new FutureTask<String>(new Runnable() {   
     @Override 
     public void run() { 
      String outcome="Task Completed Successfully"; 
     } 
    },null); 
İlgili konular