1.这种方法可以再添加多个线程,定义好执行的顺序就可以了。唤醒的时候全部唤醒。不是当前线程执行时还说会休眠。
public class Main {
private static boolean isFirst = true;
static class First implements Runnable {
private Object lock;
public First(Object lock) {
this.lock = lock;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (isFirst) {
System.out.println("1");
isFirst = false;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
static class Second implements Runnable {
Object lock;
public Second(Object lock) {
this.lock = lock;
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (!isFirst) {
System.out.println("2");
isFirst = true;
lock.notify();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public static void main(String[] args) {
Object lock = new Object();
new Thread(new First(lock)).start();
new Thread(new Second(lock)).start();
}
}
2.这种方式只是此问题的另一只解法而已。
public class Main {
public synchronized void print(String str) {
notify();
System.out.println(str);
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
class A implements Runnable {
@Override
public void run() {
while (true) {
print("A" + 1);
}
}
}
class B implements Runnable {
@Override
public void run() {
while (true) {
print("B" + 2);
}
}
}
public static void main(String[] args) {
Main p = new Main();
A a = p.new A();
B b = p.new B();
new Thread(a).start();
new Thread(b).start();
}
}