2010-09-30 103 views
4

我想調用返回字符串值的方法。實際上這個字符串值是一個實例變量,而run方法則是把這個字符串的值。如何在線程運行()結束後立即調用方法?

所以,我想調用一個方法來獲取由線程的run()方法更新的字符串值..

我該怎麼辦嗎......?

PLZ任何人幫助我..

Saravanan

回答

5
Class Whatever implements Runnable { 
    private volatile String string; 

    @Override 
    public void run() { 
     string = "whatever"; 
    } 

    public String getString() { 
     return string; 
    } 

    public void main(String[] args) throws InterruptedException { 
     Whatever whatever = new Whatever(); 
     Thread thread = new Thread(whatever); 
     thread.start(); 
     thread.join(); 
     String string = whatever.getString(); 
    } 
} 
1

使用Callable<String>相反,它提交到ExecutorService,然後調用當您提交它,它返回Future<String>get()

+0

對不起,我不能讓ü – Saravanan 2010-09-30 15:09:36

+0

啊是啊,添了我的答案,並給你一個很好的例子,所以我會留在這。 – 2010-09-30 15:16:57

9

檢出Callable這是一個可以返回結果的Runnable。

你使用這樣的:

你寫一個可贖回的,而不是一個Runnable,例如:

public class MyCallable implements Callable<Integer> { 
    public Integer call() { 
    // do something that takes really long... 
    return 1; 
    } 
} 

你踢它的將任務提交到ExecutionService:

ExecutorService es = Executors.newSingleThreadExecutor(); 
Future<Integer> task = es.submit(new MyCallable()); 

您可以找回FutureTask手柄,該手柄將在任務完成後保留結果:

Integer result = task.get(); 

FutureTask提供更多方法,如cancel,isDoneisCancelled取消執行並詢問狀態。 get方法本身被阻塞並等待任務完成。詳情請查看javadoc。

+0

爲什麼要創建一個新的FutureTask而不是直接提交Callable?我認爲這是沒有必要的。 – 2010-09-30 15:18:15

+0

@Mark:你說得對,我只是改變了。 – 2010-09-30 15:21:28

相關問題