线程交替执行
Runnable numberPrint = new Runnable() {
private int i = 0;
@Override
public void run() {
while (true) {
synchronized (this) {
this.notify();
if (i < 100) {
System.out.println(Thread.currentThread().getName() + ": " + i);
i++;
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
break;
}
}
}
}
};
Thread t1 = new Thread(numberPrint);
t1.setName("print-1");
Thread t2 = new Thread(numberPrint);
t2.setName("print-2");
t1.start();
t2.start();
生产者与消费者
public class ProductFactory {
private int productCount = 0;
public synchronized void produce() {
if (productCount < 10) {
productCount++;
System.out.println("produce product " + productCount);
notifyAll();
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void consume() {
if (productCount > 0) {
System.out.println("consume product " + productCount);
productCount--;
notifyAll();
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Producer implements Runnable {
private ProductFactory factory;
public Producer(ProductFactory factory) {
this.factory = factory;
}
@Override
public void run() {
while (true) {
factory.produce();
}
}
}
public class Consumer implements Runnable {
private ProductFactory factory;
public Consumer(ProductFactory factory) {
this.factory = factory;
}
@Override
public void run() {
while (true) {
factory.consume();
}
}
}
public static void main(String[] args) {
ProductFactory factory = new ProductFactory();
Producer producer1 = new Producer(factory);
Producer producer2 = new Producer(factory);
Consumer consumer1 = new Consumer(factory);
Consumer consumer2 = new Consumer(factory);
Thread producer1Thread = new Thread(producer1);
Thread producer2Thread = new Thread(producer2);
Thread consumer1Thread = new Thread(consumer1);
Thread consumer2Thread = new Thread(consumer2);
producer1Thread.start();
producer2Thread.start();
consumer1Thread.start();
consumer2Thread.start();
}