Java 线程在主方法完成后打印结果

Java 线程在主方法完成后打印结果,java,multithreading,Java,Multithreading,我的计算的最终结果是0,但当我在运行方法中打印结果时,在主方法完成后会显示正确的结果。有人知道为什么会这样吗 @Override public void run() { BigDecimal counter = BigDecimal.ZERO; BigDecimal numOfAllThreadsBigDecimal = new BigDecimal(getNumOfAllThreads()); BigDecimal numOfThreadBigDecimal

我的计算的最终结果是0,但当我在运行方法中打印结果时,在主方法完成后会显示正确的结果。有人知道为什么会这样吗

    @Override
public void run() {

    BigDecimal counter = BigDecimal.ZERO;
    BigDecimal numOfAllThreadsBigDecimal = new BigDecimal(getNumOfAllThreads());
    BigDecimal numOfThreadBigDecimal = new BigDecimal(getNumOfThread());
    BigDecimal numerator = BigDecimal.ZERO;
    BigDecimal divisor = BigDecimal.ZERO;
    BigDecimal endResult = BigDecimal.ZERO;

    while (!isFlag()) {
        // counter % numOfAllThreads == numOfThread
        if (counter.remainder(numOfAllThreadsBigDecimal).equals(numOfThreadBigDecimal)) {
            // (4 * counter)! * (1103 + 26390 * counter)
            numerator = BigDecimalFactorial.factorial((counter.multiply(new BigDecimal(4)))).multiply(new BigDecimal(1103).add((new BigDecimal(26390).multiply(counter))));
            // (counter!)^4 * 396^4*counter
            divisor =  ((BigDecimalFactorial.factorial(counter)).pow(4)).multiply( (new BigDecimal(396).pow(4 * counter.intValue())) ) ;
            // numerator / divisor
            endResult = endResult.add(((numerator.divide(divisor, 100, RoundingMode.HALF_UP))));

            internalSteps++;

        }
        counter = counter.add(BigDecimal.ONE);
    }
    // multiply endResult by sqrt(8) / 9801
    endResult = endResult.multiply(((BigDecimalSqrt.bigSqrt(new BigDecimal(8))).divide(new BigDecimal(9801),100,RoundingMode.HALF_UP)));
    // divide 1 / pi
    endResult = BigDecimal.ONE.divide(endResult, 100, RoundingMode.HALF_UP);

    System.out.println(endResult);

    setThreadResult(endResult);
}


    public BigDecimal getValue() {

    BigDecimal result = BigDecimal.ZERO;

    for(Ramanujan worker : workers)
        result = result.add(worker.getThreadResult());
    this.value = result;

    return this.value;
}


    public static void main(String[] args) {

    CalculatePi pi = new Ramanujan();

    pi.startCalculation();
    long timeStart = System.currentTimeMillis();

    int i = 0;
    while(i < MAX_PRECISION) {
        someDelay();
        i++;
    }
    long timeStop = System.currentTimeMillis();
    pi.stopCalculation();
    System.out.println((timeStop - timeStart) + " ms");
    System.out.println("Result: " + pi.getValue());
    System.out.println("IternalSteps: " + pi.getInternalSteps());

}

数字3.141592653589793应出现在结果行中

启动线程时,它与主线程并行运行。如果您想停止主线程的执行直到另一个线程完成其工作,有几种方法,但最简单的方法是使用join方法。有关更多信息,请阅读

Java线程可以在主方法结束后继续运行。这个答案可能也有帮助:
10004 ms (that's correct) 
Result: 0
InternalSteps: 2088
3.141592653589793...