生产者和消费者模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者和消费者模式相关的知识,希望对你有一定的参考价值。
1.sleep()是Thread类的方法;而wait(),notify(),notifyAll()是Object类中定义的方法;2.Thread.sleep和Object.wait都会暂停当前的线程,Thread.sleep不会造成当前锁行为的变化,如果当前线程有锁,调用之后并不会释放锁;而Object.wait会释放当前对象锁.
代码实现:
package ProducerCon;
import java.util.ArrayList;
import java.util.List;
public class ProducerCoThread {
public static void main(String[] args) {
List list = new ArrayList<>();
Thread t1 = new Thread(new Producer(list));
Thread t2 = new Thread(new Consumer(list));
t1.setName("生产者线程");
t2.setName("消费者线程");
t1.start();
t2.start();
}
}
class Producer implements Runnable{
private List list;
public Producer(List list) {
super();
this.list = list;
}
public void run() {
while(true) {
synchronized(list) {
if(list.size() > 0) {
try {
list.wait(); //当前线程进入等待,并释放锁.此时下面执行不了
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object obj = new Object();
list.add(obj);
System.out.println(Thread.currentThread().getName()+"---->"+obj);
list.notify();
}
}
}
}
class Consumer implements Runnable{
private List list;
public Consumer(List list) {
super();
this.list = list;
}
public void run() {
while(true) {
synchronized(list) {
if(list.size() == 0) {
try {
list.wait(); //当前线程进入等待,并释放锁.此时下面执行不了
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object obj = list.remove(0);
System.out.println(Thread.currentThread().getName()+ "---->"+obj);
list.notify();
}
}
}
}
运行结果:
以上是关于生产者和消费者模式的主要内容,如果未能解决你的问题,请参考以下文章