public class Test { volatile int i = 1; public static void main(String[] args) throws Exception { Test obj = new Test(); Runnable runnable = new Runnable() { @Override public void run() { while (obj.i <= 100) { // 上锁当前对象 synchronized (this) { // 唤醒另一个线程 notifyAll(); if (obj.i == 101) { return; } int i = new Integer(Thread.currentThread().getName()); if (obj.i % 3 == i) { System.out.println("Thread " + Thread.currentThread().getName() + " " + obj.i++); } if(obj.i % 3==1){ System.out.println("=========="); } try { if (obj.i == 101) { notifyAll(); return; } else { // 释放掉锁 wait(); } } catch (Exception e) { e.printStackTrace(); } } } } }; // 启动多个线程(想创建几个就创建几个) Thread t1 = new Thread(runnable); Thread t2 = new Thread(runnable); Thread t3 = new Thread(runnable); t1.setName("1"); t2.setName("2"); t3.setName("0"); t1.start(); t2.start(); t3.start(); } }