Java线程不改变静态值

时间:2018-06-22 20:48:53

标签: java multithreading class

我实现了以下代码类:

public class sumThread implements Runnable {
    private int index;

    private static int sum = 0;

    public sumThread(int index) {
        this.index = index;
    }

    public static int getSum() {
        return sum;
    }

    @Override
    public void run() {
        for (int i = 0; i < index + 100; i++) {
            sum += i;
        }
    }
}

第2类:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SigRuntime {

    public static void main(String args[]) {
        ExecutorService es = Executors.newCachedThreadPool();
        int index = 0;
        // for (int i = 0; i < 10; i++) {
        sumThread t = new sumThread(index);
        index += 100;
        es.execute(t);
        // }
        System.out.println(sumThread.getSum());
    }}

我正在尝试使用10个线程对0到100进行求和,因为每个线程取100个值

每当我使用sumThread.getSum()时,我都会一直得到0作为返回值! 怎么了?

1 个答案:

答案 0 :(得分:3)

sumThread.getSum();方法在线程初始化之前正在执行

如果添加

@Override
    public void run() {
        for (int i = 0; i < index + 100; i++) {
            sum += i;
        }
        System.out.println(sumThread.getSum()); //check the sum
    }

您将能够看到总和结果。

创建线程时,应用程序继续线性执行,然后在随机算法决定时执行线程。