尝试更改变量值时,Java Thread不起作用

时间:2017-02-02 10:38:07

标签: java multithreading variables

我正在尝试使用Java Threads,并尝试使用Thread在我的类中通过另一个类中的Thread更改一个名为number的变量。
但显然它不起作用,从我开始我的价值时总是得到0,也许有人可以告诉我原因。

这是我的第一堂课:

public class ThreadTest {
    public int number = 0;

    public static void main(String[] args) {
        ThreadTest Adding = new ThreadTest();
        Adding.addingOnes();
        System.out.println(Adding.number);
    }

    public void addingOnes() {
        Runnable thread1 = new ThreadClassPlus();
        Thread t1 = new Thread(thread1);
        t1.start();
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void add() {
        number++;
    }
}

我的第二堂课:

public class ThreadClassPlus extends ThreadTest implements Runnable {
    public void run() {
        for(int i = 0; i < 10000; i++) {
            add();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题是您的ThreadTest实例和ThreadClassPlus实例是不同的对象。您的帖子在后一个实例中递增number,但您的main方法正在从前者读取number的值。当然,前者没有后者的价值。

线程工作正常。问题在于你如何使用它。

以下是更正后的版本:

public class ThreadTest implements Runnable {

    public int number = 0;

    public static void main(String[] args) {
        ThreadTest adding = new ThreadTest();
        adding.addingOnes();
        System.out.println(adding.number);
    }

    public void addingOnes()
        Thread t1 = new Thread(this);
        t1.start();
        try {
            t1.join();
        } 
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void add() {
        number++;
    }

    public void run() {
        for(int i = 0; i < 10000; i++) {
            add();
        }
    }
}

请仔细注意我所做的各种风格变化。 Java风格很重要。

答案 1 :(得分:0)

只是因为您正在增加属于对象number的变量thread1的值,同时打印属于对象number的变量Adding的值。

只需输出正确的变量值,您就会看到预期的结果:

    System.out.println(((ThreadClassPlus)thread1).number);

顺便说一下,请不要将变量命名为以大写字母开头,这是非常糟糕的风格: A dding =&gt;的 dding。