私はそれがインタビューだ:Javaのマルチスレッド - 自然な順序で番号を印刷する方法
Thread-A Prints Even numbers from 0
Thread-B prints Odd numbers from 1
私はachiveするにはどうすればよい千 まで自然な順序で.... 0 1 2 3 4を印刷したいです。あなたがスレッドを起動すると、その時点で、= ThreadDemo2.aa
を
public class ThreadDemo2 {
static int aa = 0;
public static void main(String[] args) {
boolean mytime = true;
EvenThread et = new EvenThread(mytime);
OddThread ot = new OddThread(mytime);
et.start();
ot.start();
}
}
class EvenThread extends Thread {
boolean mytime;
int i = 0;
public EvenThread(boolean mytime) {
this.mytime = mytime;
}
public void run() {
//if (ThreadDemo2.aa == 0) {
for (int i = 0; i < 1000 && ThreadDemo2.aa == 0; i += 2) {
System.out.println(i);
ThreadDemo2.aa = 1;
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// }
}/* else
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
}
class OddThread extends Thread {
boolean mytime;
int i = 1;
public OddThread(boolean mytime) {
this.mytime = mytime;
}
public void run() {
//if (ThreadDemo2.aa == 1) {
for (int i = 1; i < 1000 && ThreadDemo2.aa == 1; i += 2) {
System.out.println(i);
ThreadDemo2.aa = 0;
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//ThreadDemo2.aa = 0;
//}
}
}
他の人があなたのコードをコピーしてコンパイルして実行するとは思わないでください。何が起こるか教えてくれれば簡単です。さらに、私が言うことができる限り、あなたのコードには、ここで必要な本質的なものが欠けています.2つのスレッドをインターロックする必要があります。基本的に正しい順序で番号を印刷するにはロックステップで実行する必要があります。それは割り当てのハード**部分のようなものです。だから、あなたは私たちがあなたのために重労働をして欲しいのですか? – GhostCat
@Jägermeister、それは私たちが普通に人々に伝えるものの反対です。あなたはOPに "何が起こるか教えてください"と言いますが、OPは何が起こったのかを理解していません。だから彼は尋ねている。実際にコードがコード自体よりも良い記述はありません。あなたのコードを見せてくれるSOのコメントを数えてみてください。 OTOHでは、あまりにも多くのコードを投稿することがあり、簡略化するように要請しています(http://sscce.org/を参照)。 –
次のリンクを参照してください:http://stackoverflow.com/a/36183057/437506 –