1
我有兩個線程同時運行,一個主線程和一箇舊的布爾變量類,我目前有一個thrad打印賠率和其他打印evens,但我讓他們等待彼此以便它按順序打印1 - 100。在java中的類同步
我目前在我的NumberPrinter類中引用了一個布爾對象,並且我正在使用它來使線程進入等待狀態以等待另一個對象。我知道如何在同一個類中進行同步,但是當我嘗試在線程間進行同步時,它會掛起並看起來像布爾變量沒有被更新或與兩個線程同步。至少,這就是爲什麼我認爲是問題
感謝任何建議表示讚賞
我的測試類
public class Test {
public static void main(String[] args) throws InterruptedException {
NumberPrinter np = new NumberPrinter();
single ent = new single(np);// new state
Double ont = new Double(np);// new state
ent.start();
ont.start();
}
}
類甚至
public class single extends Thread {
private NumberPrinter printer;
public single(NumberPrinter np) {
this.printer = np;
}
public synchronized void run() {
try {
for (int i = 1; i <= 100; i++) {
System.out.println(printer.isOdd);
if (i % 2 == 0) {
if (printer.isOdd == true) {
wait();
}
System.out.println(i);
printer.isOdd = true;
notifyAll();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
類奇
public class Double extends Thread {
private NumberPrinter printer;
public Double(NumberPrinter np) {
this.printer = np;
}
public synchronized void run() {
try {
for (int i = 1; i <= 100; i++) {
System.out.println(printer.isOdd);
if (i % 2 == 1) {
if (printer.isOdd == false) {
wait();
}
System.out.println(getName() + ": " + i);
printer.isOdd = false;
notifyAll();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
一個類來保存布爾變量
package single;
public class NumberPrinter {
public boolean isOdd = true;
}
感謝這個修好了!我非常感謝幫助 –