java线程同步与互斥
生产者与消费者
package com.huawei.Interview.thread;
public class ThreadDemo01 {
public static void main(String[] args) {
Product product = new Product();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
}
}
class Product {
private int num = 10;
public int getNum() {
return this.num;
}
public synchronized void produce() {
if (this.getNum() > 10) {// 数量大于10,线程等待不再生产
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
num += 10;// 再生产10个
System.out.println("produce another 10 products,current number is --->"
+ num);
notify();
}
public synchronized void consume() {
if (this.getNum() < 3) {// 数量少于三个等待,不再消费
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
--num;// 消费一个
System.out.println("consume 1 products,current number is --->" + num);
notify();
}
}
class Consumer implements Runnable {
private Product product = null;
public Consumer(Product pro) {
this.product = pro;
}
public void run() {
while (true) {
product.consume();
}
}
}
class Producer implements Runnable {
private Product product = null;
public Producer(Product pro) {
this.product = pro;
}
public void run() {
while (true)
product.produce();
}
}