我想了解线程是如何工作的,我写了一个简单的例子,我想创建并启动一个新线程,线程,在主线程中显示从1到1000的数字,恢复辅助线程,并在辅助线程中显示从1到1000的数字。当我忽略Thread.wait()/ Thread.notify()它的行为如预期时,两个线程一次显示几个数字。当我添加这些函数时,出于某种原因,主线程的数字将被打印第二个而不是第一个。我究竟做错了什么?获取一个线程暂停 - Thread.wait()/ Thread.notify()
public class Main {
public class ExampleThread extends Thread {
public ExampleThread() {
System.out.println("ExampleThread's name is: " + this.getName());
}
@Override
public void run() {
for(int i = 1; i < 1000; i++) {
System.out.println(Thread.currentThread().getName());
System.out.println(i);
}
}
}
public static void main(String[] args) {
new Main().go();
}
public void go() {
Thread t = new ExampleThread();
t.start();
synchronized(t) {
try {
t.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int i = 1; i < 1000; i++) {
System.out.println(Thread.currentThread().getName());
System.out.println(i);
}
synchronized(t) {
t.notify();
}
}
}
正如你所知,wait/notify被认为已被弃用,你应该学习java.util.concurrent。 “Java并发实践”是迄今为止关于这个主题的最好的书。 – toto2
@ toto2等待/通知不被视为弃用。并发包包含更高级别的并发结构,通常*可以简化并发编程,因此对于大多数情况下使用这些更高级别的结构是可取的。 –