Java 多个生产者和多个消费者
代码如下:
package 测试;
import java.util.ArrayList;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class 生产者消费者问题
{
static Lock lock = new ReentrantLock();
static boolean flags = true;
static ArrayList<String> list = new ArrayList<String>();
static int num = 5;
static Condition 生产者等待队列 = lock.newCondition();
static Condition 消费者等待队列 = lock.newCondition();
public static void main(
String[] args)
throws InterruptedException
{
Runnable 生产者任务 = () ->
{
try
{
lock.lock();
while (true)
{
if (list.size() != num)
{
System.out.println(
Thread.currentThread()
.getName()
+ ":生产了一个货物!"
);
list.add("货物");
}
if (list.size() == num)
{
flags = false;
消费者等待队列.signalAll();
生产者等待队列.await();
}
生产者等待队列.signalAll();
生产者等待队列.await();
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
lock.unlock();
}
};
Runnable 消费者任务 = () ->
{
try
{
lock.lock();
while (true)
{
if (list.size()!=0)
{
System.out.println(
Thread.currentThread()
.getName()
+ ":消费了一个货物!"
);
list.remove(0);
}
if (list.size() ==0)
{
生产者等待队列.signalAll();
消费者等待队列.await();
}
消费者等待队列.signalAll();
消费者等待队列.await();
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
lock.unlock();
}
};
Thread A = new Thread(生产者任务, "生产者A");
Thread B = new Thread(消费者任务, "消费者B");
Thread A1 = new Thread(生产者任务, "生产者A1");
Thread A2 = new Thread(生产者任务, "生产者A2");
Thread B1 = new Thread(消费者任务, "消费者B1");
Thread B2 = new Thread(消费者任务, "消费者B2");
A.start();
Thread.sleep(1);
A1.start();
Thread.sleep(1);
A2.start();
Thread.sleep(1);
B.start();
Thread.sleep(1);
B1.start();
Thread.sleep(1);
B2.start();
}
}
输出:
生产者A:生产了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
消费者B:消费了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
生产者A1:生产了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
生产者A2:生产了一个货物!
生产者A1:生产了一个货物!
消费者B1:消费了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
生产者A2:生产了一个货物!
生产者A2:生产了一个货物!
消费者B2:消费了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
消费者B1:消费了一个货物!
生产者A2:生产了一个货物!
生产者A1:生产了一个货物!
消费者B2:消费了一个货物!
消费者B1:消费了一个货物!
生产者A:生产了一个货物!
生产者A2:生产了一个货物!
消费者B:消费了一个货物!
消费者B2:消费了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
生产者A2:生产了一个货物!
生产者A1:生产了一个货物!
消费者B2:消费了一个货物!
消费者B1:消费了一个货物!
生产者A:生产了一个货物!
生产者A2:生产了一个货物!
消费者B:消费了一个货物!
消费者B2:消费了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
生产者A2:生产了一个货物!
生产者A1:生产了一个货物!
消费者B2:消费了一个货物!
消费者B1:消费了一个货物!
生产者A:生产了一个货物!
生产者A2:生产了一个货物!
消费者B:消费了一个货物!
消费者B2:消费了一个货物!
生产者A1:生产了一个货物!
生产者A:生产了一个货物!
消费者B1:消费了一个货物!
消费者B:消费了一个货物!
生产者A2:生产了一个货物!
生产者A1:生产了一个货物!
消费者B2:消费了一个货物!
消费者B1:消费了一个货物!
生产者A:生产了一个货物!