1

変数を最終的にせずにスレッド外の変数にアクセスする方法は?

int x=0;
Thread test = new Thread(){
public void run(){
x=10+20+20;   //i can't access this variable x without making it final, and if i make     it.....                   
              //final i can't assign value to it
}
};    
test.start();
4

1 に答える 1

3

理想的には、使用ExecutorService.submit(Callable<Integer>)してから呼び出しFuture.get()て値を取得します。スレッドによって共有される変数を変更するには、同期アクションが必要です。たとえばvolatilelockまたはsynchronizedキーワード

    Future<Integer> resultOfX = Executors.newSingleThreadExecutor().submit(new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {
            return 10 + 20 + 20;
        }
    });
    int x;
    try {
        x = resultOfX.get();
    } catch (InterruptedException ex) {
        // never happen unless it is interrupted
    } catch (ExecutionException ex) {
        // never happen unless exception is thrown in Callable
    }
于 2013-06-21T12:06:02.473 に答える