我正在尝试使用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();
}
}
}
答案 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。