猿问

Java线程不改变静态值

我已经实现了以下代码类:


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作为返回值!它出什么问题了?


神不在的星期二
浏览 171回答 1
1回答

梵蒂冈之花

sumThread.getSum();在线程初始化之前执行该方法如果您添加@Override&nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < index + 100; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sum += i;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(sumThread.getSum()); //check the sum&nbsp; &nbsp; }您将能够看到总和结果。创建线程时,应用程序继续线性执行,然后在随机算法决定时执行线程。
随时随地看视频慕课网APP

相关分类

Java
我要回答