标签:
1.资源
public class Resource {
//当前资源的数量
int num = 0;
//当前资源的上限
int size = 10;
//消费资源
public synchronized void remove() {
//如果num为0,没有资源了,需要等待
while (num == 0) {
try {
System.out.println("消费者进入等待");
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//如果线程可以执行到这里,说明资源里有资源可以消费
num--;
System.out.println("消费者线程为:" + Thread.currentThread().getName() + "--资源数量:" + num);
this.notifyAll();
}
//生产资源
public synchronized void put() {
//如果资源满了,就进入阻塞状态
while (num == size) {
try {
System.out.println("生产者进入等待");
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
num++;
System.out.println("生产者线程为:" + Thread.currentThread().getName() + "--资源数量:" + num);
this.notifyAll();
}
}
2.消费者
public class Consumer implements Runnable {
private Resource resource;
public Consumer(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true){
resource.remove();
}
}
}
3.生产者
public class Producer implements Runnable {
private Resource resource;
public Producer(Resource resource){
this.resource=resource;
}
@Override
public void run() {
while (true){
resource.put();
}
}
}
4.测试
public class TestConsumerAndProducer {
public static void main(String[] args) {
Resource resource = new Resource();
//生产线程
Producer p1 = new Producer(resource);
//消费线程
Consumer c1 = new Consumer(resource);
new Thread(p1).start();
new Thread(c1).start();
}
}
标签:
来源: https://blog.csdn.net/u010452388/article/details/82624599