【发布时间】:2016-03-23 12:14:54
【问题描述】:
我得到了采访:
Thread-A Prints Even numbers from 0
Thread-B prints Odd numbers from 1
我想按自然顺序打印 0 1 2 3 4.... 直到 1000 我怎样才能达到。
我试过这样:
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;
//}
}
}
【问题讨论】:
-
不要指望别人复制你的代码,编译并运行它。如果你告诉我们会发生什么事情会更容易。此外,据我所知,您的代码缺少此处所需的基本内容:您必须互锁两个线程,基本上它们需要同步运行才能以正确的顺序打印数字。这就像作业的 hard 部分。那么,您希望我们为您完成繁重的工作吗?
-
@Jägermeister,这与我们通常告诉人们的相反。您希望 OP “告诉您发生了什么”,但 OP 不了解会发生什么。这就是他问的原因。没有比代码本身更好地描述代码实际执行的操作了。试着数一下 SO 上的 cmets,上面写着“老兄!给我们看看你的代码!” OTOH,有时他们发布了太多代码,我们要求他们简化它:(见sscce.org)
-
请参阅:stackoverflow.com/a/36183057/437506 以获取其他信息。
标签: java multithreading thread-sleep thread-synchronization