方案一:
public class Test100_02 {
    private static Object object = new Object();
    private static boolean isFlag = false;
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 1; i <= 999; i+=2) {
                synchronized (object) {
                    if (!isFlag) {
                        System.out.println("current:" + i);
                        isFlag = true;
                        try {
                            object.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        object.notify();
                    }
                }
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 2; i <= 1000; i+=2) {
                synchronized (object) {
                    if (isFlag) {
                        isFlag = false;
                        System.out.println("current:" + i);
                        object.notify();
                        try {
                            object.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        t1.setPriority(Thread.MAX_PRIORITY);
        t1.start();
        t2.start();
    }
}
方案二:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test100_01 {
    private static Lock lock = new ReentrantLock();
    private static Condition condition1 = lock.newCondition();
    private static Condition condition2 = lock.newCondition();
    public static void main(String[] args) {
        // thread 1
        Thread t1 = new Thread(() -> {
            for (int i = 1; i <= 999; i += 2) {
                lock.lock();
                try {
                    System.out.println("current:" + i);
                    condition1.await();
                    condition2.signal();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.unlock();
            }
        });
        // thread 2
        Thread t2 = new Thread(() -> {
            for (int i = 2; i <= 1000; i += 2) {
                lock.lock();
                try {
                    System.out.println("current:" + i);
                    condition1.signal();
                    condition2.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.unlock();
            }
        });
        t1.setPriority(Thread.MAX_PRIORITY);
        t1.start();
        t2.start();
    }
}
你的代码我运行了貌似会在中途卡住,
我改进了一下顺序
condition2.signal();
System.out.println("current:" + i);
condition1.await();
condition1.signal();
System.out.println("current:" + i);
condition2.await();