我的程序没有返回预期的输出,我非常努力,但我不知道该怎么做这个代码。我该怎么办?
预期输出
1 2 3 4 5 6 7 8 ......2000
实际输出
1 2 3 4 5 6 1 2 3 4 5 6 ..1000
主要
public class Race_ConditonTest {
public static void main(String[] args) {
Race_Condition2 R1 = new Race_Condition2();
Race_Condition2 R2 = new Race_Condition2();
R1.start();
R2.start();
}
}
RaceCondition2(子类)
public class Race_Condition2 extends Thread{
Race_Condition R= new Race_Condition();
public void run() {
R.sum();
}
}
RaceCondition类(超类)
public class Race_Condition {
int x=0;
public int Load(int x){
return x;
}
public void Store(int data) {
int x= data;
System.out.println(x);
}
public int Add(int i,int j) {
return i+j ;
}
public void sum() {
for (int i=0 ; i<1000 ; i++) {
this.x=Load(x);
this.x=Add(x,1);
Store(x);
}
}
}
答案 0 :(得分:0)
我该如何分享x?
简单方法&gt; make x
static 。
...
static int x=0;
... 的修改
经过一些测试,如果你发现了一些奇怪的事情,那么让Store功能同步。
public synchronized void Store(int data) {
int x= data;
System.out.println(x);
}
查看同步工作synchronized
的工作原理答案 1 :(得分:0)
如果您的目标是在R1和R2之间共享属性x,则可以在RaceCondition类中将其设置为静态。
static int x=0;
请注意,如果共享x,它们将同时访问它,因此可能产生一些奇怪的输出。创建访问x synchronized
的函数(如here所述):
// static cause it only access a static field
// synchronized so the access the the shared resource is managed
public static synchronized void sum() {
for (int i=0 ; i<1000 ; i++) {
this.x=Load(x);
this.x=Add(x,1);
Store(x);
}
}
您应该对其他功能进行相同的更改。