生产者和消费者问题
来源:互联网 发布:oracle sql教程 编辑:程序博客网 时间:2024/05/21 00:48
```
package 生产者消费者;
public class ProducerConsumerTest {
public static void main(String[] args) {
PublicResource resource = new PublicResource();
new Thread(new ProducerThread(resource)).start();
new Thread(new ConsumerThread(resource)).start();
new Thread(new ProducerThread(resource)).start();
new Thread(new ConsumerThread(resource)).start();
new Thread(new ProducerThread(resource)).start();
new Thread(new ConsumerThread(resource)).start();
}
}
```
```
package 生产者消费者;
/**
* 生产者线程,负责生产公共资源
* @author dream
*
*/
public class ProducerThread implements Runnable{
private PublicResource resource;
public ProducerThread(PublicResource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
resource.increase();
}
}
}
```
```
package 生产者消费者;
/**
* 消费者线程,负责消费公共资源
* @author dream
*
*/
public class ConsumerThread implements Runnable{
private PublicResource resource;
public ConsumerThread(PublicResource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
resource.decrease();
}
}
}
```
```
package 生产者消费者;
/**
* 公共资源类
* @author dream
*
*/
public class PublicResource {
private int number = 0;
private int size = 10;
/**
* 增加公共资源
*/
public synchronized void increase()
{
while (number >= size) {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
number++;
System.out.println("生产了1个,总共有" + number);
notifyAll();
}
/**
* 减少公共资源
*/
public synchronized void decrease()
{
while (number <= 0) {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
number--;
System.out.println("消费了1个,总共有" + number);
notifyAll();
}
}
```
0 0
- 消费者和生产者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 消费者和生产者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 垂直水平居中
- 【微信小程序学习笔记】弹窗的两种姿势
- codevs 2144 砝码称重 2(搜索+剪枝)
- 后台管理UI
- 王学岗RxJava(七)————ReplaySubject
- 生产者和消费者问题
- Neutron分析(3)—— neutron-l3-agent - feisky
- mysql存储过程 游标 循环使用介绍
- 正向代理和反向代理的区别
- 拦截器与过滤器的区别以及他们的执行顺序?
- pageHelper分页插件实现原理及使用方法
- 结构体的字节对齐
- 393. UTF-8 Validation
- Maven Dependency插件Goal tree分析工程artifacts依赖