据我所知,使用java synchronize和notify()以及wait()方法同步两个线程的方式如下:
public class Tester {
public static void main(String[] args) throws InterruptedException {
final Business business = new Business();
// 子线程
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
try {
business.sonBusiness(i);
} catch (InterruptedException e) {
}
}
}
}).start();
for (int i = 0; i < 50; i++) {
business.mainBusiness(i);
}
}
}
class Business {
public void mainBusiness(int i) throws InterruptedException {
synchronized (this) {
for (int j = 1; j <= 20; j++) {
System.out.println("主线程第" + i + "轮,第" + j + "次");
}
this.notify();
this.wait();
}
}
public void sonBusiness(int i) throws InterruptedException {
synchronized (this) {
for (int j = 1; j <= 30; j++) {
System.err.println("子线程第" + i + "轮,第" + j + "次");
}
this.notify();
this.wait();
}
}
}
然而,我看到的输出(见下文)告诉我,同步不符合我的预期。我认为主线程和新线程可以一个接一个地运行&#34;在大多数情况下他们这样做。但我得到以下输出。我不知道如何解释,请帮我一把。
答案 0 :(得分:3)
我想这是因为您要同时将它们打印到System.err
和public class ObjectType {
ObjectType1 ob1;
ObjectType2 ob2;
// setters and getters
}
。在IDE中,它们可能是同一个控制台,但不能很好地同步。