Считая, что общий объект Control
заставит n
потоки (Number
) отображать по порядку, они явно не:
Number:
public class Number implements Runnable {
private int i_;
private Control control;
public Number(int i, Control c) {
i_ = i;
control = c;
}
public void start() {
new Thread(this).start();
}
public void run() {
synchronized(control) {
control.call(i_);
}
}
}
Control :
public class Control {
private int i_ = 0;
public void call(int i) {
if(i != i_) {
try {
wait();
}
catch(Exception e) {}
}
System.out.println(i);
i_++; // next, please
notify();
}
}
Испытательный жгут (основной):
public class RunNumbers {
public static void main(String args[]) {
int n = 0;
if (args.length > 0) {
n = Integer.parseInt(args[0]);
}
Control c = new Control();
for(int i = 0; i < n; ++i) {
new Number(i, c).start();
}
}
}
Есть идеи?