如何在线程之间共享变量?

问题描述 投票:0回答:1

我有两个名为t1t2的线程。它们仅添加total整数变量。但是变量total不在这些线程之间共享。我想在两个totalt1线程中使用相同的t2变量。我该怎么办?

我的Adder可运行类:

public class Adder implements Runnable{

    int a;
    int total;

    public Adder(int a) {
        this.a=a;
        total = 0;
    }

    public int getTotal() {
        return total;
    }

    @Override
    public void run() {
        total = total+a;

    }

}

我的主班:

public class Main {

    public static void main(String[] args) {

        Adder adder1=new Adder(2);

        Adder adder2= new Adder(7);

        Thread t1= new Thread(adder1);
        Thread t2= new Thread(adder2);

        thread1.start();
        try {
            thread1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        t2.start();
        try {
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        System.out.println(adder1.getTotal());  //prints 7 (But it should print 9)
        System.out.println(adder2.getTotal()); //prints 2  (But it should print 9)


    }

}

两个打印语句应该给出9,但是它们分别给出7和2。(因为总变量不被t1和t2共享)

java multithreading java-threads
1个回答
0
投票

最简单的方法是将total static设置为在所有Adder实例之间共享。

© www.soinside.com 2019 - 2024. All rights reserved.