簡體   English   中英

線程運行時如何修改變量

[英]How to modify variables while thread is running

最初,我使用Runnable並構建了一個“ while(true)”循環來繼續處理我的工作。 現在我發現在更改為使用Callable時有些困難。

package com;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableAndFuture {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        ChildCallbale childCallbale = new ChildCallbale();
        FutureTask<Integer> future = new FutureTask<Integer>(childCallbale);
        Thread thread = new Thread(future);
        thread.start();
        childCallbale.setVar(1);
        System.out.println(future.get());
        childCallbale.setVar(2);
        System.out.println(future.get());
    }
}
class ChildCallbale implements Callable<Integer>{
    private int var;

    public void setVar(int var){
        this.var = var;
    }
    @Override
    public Integer call() throws Exception {
        Thread.sleep(2000);
        return var;
    }
}

如您所見,我希望獲得不同的結果。 不幸的是,這2個結果等於1。不僅我想知道如何實現我的要求,還想知道我的代碼變得不正確的原因。 提前致謝。

Future的get()方法等待計算完成。 因此,它等待線程休眠的兩秒鍾。 然后結果為1。結果保持為1,因為該線程未重新運行(並且不應重新運行!)。

因此,第二個setVar對結果沒有影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM