package com.test;
public class WaitNotify {
private final int CAPACITY = 10;
private volatile int size = 0;
private final Object lock = new Object();
public void Consumer(){
synchronized (lock) {
while(size <= 0){
System.out.println("consumer wait");
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
size --;
System.out.println("Consume a product, size:"+size);
lock.notify();
}
}
public void Productor(){
synchronized (lock) {
while(size == CAPACITY){//read
System.out.println("productor wait");
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
size ++;
System.out.println("Produce a product, size:"+size);
lock.notify();
}
}
public static void main(String[] args) {
WaitNotify waitNotify = new WaitNotify();
for(int i=0;i<2;i++){
new Thread(()->{while(true)waitNotify.Consumer();}).start();
}
for(int i=0;i<2;i++){
new Thread(()->{while(true)waitNotify.Productor();}).start();
}
for(int i=0;i<111;i++){
new Thread(()->{waitNotify.Productor();}).start();
}
for(int i=0;i<111;i++){
new Thread(()->{waitNotify.Consumer();}).start();
}
}
}
本文详细介绍了消费者生产者模式在并发控制中的应用,通过使用Java同步机制实现线程间的协作与资源高效利用。讨论了同步锁、等待与通知机制在解决多线程竞争条件和资源共享问题上的作用。

3288

被折叠的 条评论
为什么被折叠?



