首页 > 解决方案 > 在java中,如果使用同步,即使考虑到不一致的值

问题描述

在这里,我使用synchronized两个线程的通用计数器变量t1t2但即使计数器值不一致,请任何人解释为什么它会给出这样的结果并给出解决方案。

public class Sync {
    public static int counter = 0;

    private static synchronized void increment() {
        ++counter;
    }

    public static void process() {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++)
                    increment();
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++)
                    increment();
            }

        });
        t1.start();
        t2.start();


    }

    public static void main(String[] args) {
        process();
        System.out.println("counter is:: " + counter);
    }
}

它应该将计数器值设为 2000。

标签: javamultithreading

解决方案


因为您的主线程不会等待其他线程完成。它打印结果,而其他线程仍在递增计数器。

用于Thread.join()修复它:

t1.join();
t2.join();

推荐阅读