第一次写生产者消费者问题
来源:互联网 发布:发型p图软件 编辑:程序博客网 时间:2024/06/06 01:21
/*
* 生产者和消费者问题
*/
package lyj.java;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//描述资源
class Resource{
//成员
private String name;
private int num;
//定义标记
private boolean flag=false;
//引入lock,创建lock对象
private Lock lock=new ReentrantLock();
//引入condition
private Condition pro=lock.newCondition();
private Condition con=lock.newCondition();
//方法1:生产
public void set(String name){
//获取锁
lock.lock();
try{
//循环
while(true)
{
//判断标记
while(flag)
try{pro.await();}catch(InterruptedException e){}
this.name=name+num;
num++;
System.out.println(Thread.currentThread().getName()+"----生产---"+this.name);
//更改标记
flag=true;
//唤醒消费者
con.signal();
}
}
//释放锁
finally{
lock.unlock();
}
}
//方法2:消费
public void out(){
//获取锁
lock.lock();
try{
//循环
while(true)
{
//判断标记
while(!flag)
try{con.await();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"--消费---"+this.name);
//更改标记
flag=false;
//唤醒生产者
pro.signal();
}
}
//释放锁
finally{
lock.unlock();
}
}
}
//描述生产者
class Producer implements Runnable{
private Resource r;
//利用构造函数对资源对象进行初始化
Producer(Resource r){
this.r=r;
}
//重写run方法
@Override
public void run() {
r.set("馒头");
}
}
//描述消费者
class Consumer implements Runnable{
private Resource r;
//利用构造方法对资源对象初始化
Consumer(Resource r){
this.r=r;
}
//重写run方法
@Override
public void run() {
r.out();
}
}
public class Test1 {
public static void main(String[] args) {
Resource r=new Resource();
//生产者线程
Producer pro=new Producer(r);
//消费者线程
Consumer con=new Consumer(r);
Thread t1=new Thread(pro);
Thread t2=new Thread(con);
t1.start();
t2.start();
}
}
* 生产者和消费者问题
*/
package lyj.java;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//描述资源
class Resource{
//成员
private String name;
private int num;
//定义标记
private boolean flag=false;
//引入lock,创建lock对象
private Lock lock=new ReentrantLock();
//引入condition
private Condition pro=lock.newCondition();
private Condition con=lock.newCondition();
//方法1:生产
public void set(String name){
//获取锁
lock.lock();
try{
//循环
while(true)
{
//判断标记
while(flag)
try{pro.await();}catch(InterruptedException e){}
this.name=name+num;
num++;
System.out.println(Thread.currentThread().getName()+"----生产---"+this.name);
//更改标记
flag=true;
//唤醒消费者
con.signal();
}
}
//释放锁
finally{
lock.unlock();
}
}
//方法2:消费
public void out(){
//获取锁
lock.lock();
try{
//循环
while(true)
{
//判断标记
while(!flag)
try{con.await();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"--消费---"+this.name);
//更改标记
flag=false;
//唤醒生产者
pro.signal();
}
}
//释放锁
finally{
lock.unlock();
}
}
}
//描述生产者
class Producer implements Runnable{
private Resource r;
//利用构造函数对资源对象进行初始化
Producer(Resource r){
this.r=r;
}
//重写run方法
@Override
public void run() {
r.set("馒头");
}
}
//描述消费者
class Consumer implements Runnable{
private Resource r;
//利用构造方法对资源对象初始化
Consumer(Resource r){
this.r=r;
}
//重写run方法
@Override
public void run() {
r.out();
}
}
public class Test1 {
public static void main(String[] args) {
Resource r=new Resource();
//生产者线程
Producer pro=new Producer(r);
//消费者线程
Consumer con=new Consumer(r);
Thread t1=new Thread(pro);
Thread t2=new Thread(con);
t1.start();
t2.start();
}
}
0 0
- 第一次写生产者消费者问题
- 生产者消费者问题与读者写者问题---信号量机制
- Java实现生产者消费者问题与读者写者问题
- 操作系统中,生产者消费者问题&读者写者问题
- C语言:生产者-消费者问题、读者-写者问题
- Java实现生产者消费者问题与读者写者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 操作系统:生产者-消费者问题
- 生产者与消费者问题
- 生产者-消费者问题
- 关于生产者-消费者问题
- java生产者 消费者问题
- 消费者和生产者问题
- 生产者消费者问题
- 生产者消费者问题--多线程
- 生产者-消费者同步问题
- Android四大组件
- Ubuntu下面怎么找到一个软件安装的目录
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 【我的Android进阶之旅】解决 Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86
- Hibernate session错误:
- 第一次写生产者消费者问题
- BZOJ1801: [Ahoi2009]chess 中国象棋
- 继承与派生
- Android之SQLite数据库的使用
- 解决百度地图过段时间只显示网格的问题
- MySQL数据库密码篇
- c语言实现strcpy
- hadoop RPC
- 封装SQL访问方法