`
liumin1939
  • 浏览: 57625 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生产者消费者JAVA队列实现

阅读更多
class SyncQueue...{
    private int head=0;//队头
    private int tail=1;//队尾
    public final int Num=6;//缓冲区大小
    public char data[]=new char[Num];
    public  synchronized void inqueue(char c)...{
        while((tail+1)%Num==head)...{
            try...{
                this.wait();
            }catch(InterruptedException e)...{System.out.println(e);}
            
        }
        this.notify();
        
            data[tail]=c;
            tail=(tail+1)%Num;
            System.out.println("produced:" + c );
        
        
    }
    public  synchronized char outqueue()...{
        while((head+1)%Num==tail)...{
            try...{
                this.wait();
            }catch(InterruptedException e)...{System.out.println(e);}
        }
            this.notify();
        
    
            head=(head+1)%Num;
            
            System.out.println("消费:"+data[head]);
            return data[head];
        
    
    }
}


class Producer implements Runnable...{
    SyncQueue queue;
    public Producer(SyncQueue s)...{
        queue=s;
    }
    public void run()...{
        for(int i=0;i<20;i++)...{
            char c=(char)(Math.random()*26+'A');
            queue.inqueue(c);
            try...{
                Thread.sleep((int)(Math.random()*20));
            }catch(InterruptedException e)...{System.out.println(e);}
        }
    }
}



class Customer implements Runnable...{
    SyncQueue queue;
    public Customer(SyncQueue s)...{
        queue=s;
    }
    public void run()...{
        for(int i=0;i<20;i++)...{
            char c=queue.outqueue();
            try...{
                Thread.sleep((int)(Math.random()*20));
            }catch(InterruptedException e)...{System.out.println(e);}
        }
    }
}



public class SyncTest...{
    public static void main (String[] args) ...{
        SyncQueue queue=new SyncQueue();
        Runnable p=new Producer(queue);
        Runnable c=new Customer(queue);
        Thread t1=new Thread(p);
        Thread t2=new Thread(c);
        t1.start();
        t2.start();
        
    }
}


注:注意wait()和notify()的位置,否则将引者死锁的发生。
分享到:
评论
1 楼 aoly80 2009-07-28  
能给点注释吗

相关推荐

    生产者与消费者 java实现

    本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...

    操作系统生产者与消费者问题Java简单模拟实现

    总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    在"阻塞队列实现生产者消费者模式Java开发Java经验技巧共4页.pdf.zip"这个压缩包中,很可能是详细介绍了如何使用Java的阻塞队列来构建生产者消费者模式,可能包括以下知识点: 1. **阻塞队列接口**:首先,会介绍`...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    生产者消费者问题 Java实现

    在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...

    java多线程实现生产者和消费者

    `BlockingQueue`接口提供了线程安全的队列,自动处理了等待和唤醒操作,是实现生产者-消费者模型的一种高效方式。 4. **条件变量**:`wait()`, `notify()`和`notifyAll()`是基于条件变量的,它们可以使得线程在特定...

    生产者消费者问题java

    下面是一个简单的生产者消费者问题的Java实现: ```java import java.util.concurrent.ArrayBlockingQueue; public class ProducerConsumerProblem { public static void main(String[] args) { ...

    java实现生产者消费者

    在Java中,`java.util.concurrent`包下的`BlockingQueue`接口提供了一种线程安全的数据结构,非常适合用于实现生产者消费者模式。生产者将产品放入队列,消费者从队列中取出产品。`BlockingQueue`提供了`put()`和`...

    生产者消费者问题 Java

    总之,这个项目通过Java的多线程和`BlockingQueue`,实现了生产者消费者问题的直观演示,无论是在GUI界面还是命令行环境中都能运行。对于学习Java并发编程和理解线程同步机制的人来说,这是一个非常有价值的实践案例...

    模拟生产者消费者问题(java)

    2. **阻塞队列**:在Java中,阻塞队列(如`ArrayBlockingQueue`)常用于生产者-消费者问题。当队列满时,生产者会被阻塞,直到队列有空位;当队列为空时,消费者会被阻塞,直到队列中有数据。这样可以避免资源浪费,...

    java生产者消费者问题

    在CSDN.NET博客文章中,作者详细讨论了如何使用线程同步和等待的应用来解决此问题,并提供了示例代码ProducerConsumer.java和ProducerConsumerx.java,这些代码可以帮助读者更好地理解和实现生产者消费者模型。...

    生产者消费者java源码

    在描述中提到的"生产者消费者java源码.txt"文件,可能包含了具体的实现细节。在这个文件中,我们可以预期找到`Producer`和`Consumer`类的定义,这两个类分别代表生产者和消费者。`Producer`类通常包含一个循环,用于...

    java生产者消费者demo

    在Java编程中,"生产者消费者问题"是一个经典的多线程同步问题,它涉及到了如何在多线程环境下有效地共享资源。在这个问题中,"生产者"负责创建资源,而"消费者"则负责消费这些资源。为了确保生产者不会在资源耗尽时...

    java生产者消费者

    Java生产者消费者模式是一种多线程设计模式,它在并发编程中被广泛使用,用于解决资源的共享问题。在这个模式中,"生产者"负责创建数据,而"消费者"则负责处理这些数据。它们通过一个共享的数据缓冲区进行通信,避免...

    消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

    综上所述,"消息分发框架(基于JAVA阻塞队列实现、生产者消费者模型)"是一个关键的并发处理组件,通过Java提供的并发工具和设计模式,实现了高效、稳定的消息处理。在实际应用中,需要根据业务需求进行适当的性能...

    生产者消费者 java

    ### 生产者消费者模型在Java中的实现 #### 概述 生产者消费者模型是一种经典的多线程编程模式,被广泛应用于解决并发环境下的数据生产和消费问题。在这个模型中,“生产者”负责创建数据并将其放入缓冲区(通常是...

    生产者消费者模式在java中的应用

    在Java中实现生产者消费者模式,主要依赖于Java提供的并发工具类,如`BlockingQueue`接口以及其实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。这些队列具有线程安全的特性,能够有效地避免数据竞争和...

    生产者/消费者模式 阻塞队列 LinkedBlockingQueue

    在Java中,阻塞队列(BlockingQueue)是一个很好的实现生产者/消费者模式的工具,而LinkedBlockingQueue则是Java并发包(java.util.concurrent)中提供的一个具体实现。 LinkedBlockingQueue是一个基于链表结构的...

    java队列实现(顺序队列、链式队列、循环队列)

    Java中的队列是一种数据结构,它遵循先进先出(FIFO)原则,即最先插入的元素将是最先被删除的。...队列是许多算法和并发编程场景的基础,如生产者消费者模型、多线程同步等,因此深入理解和掌握队列的实现至关重要。

    生产者 消费者 进程 可视化 java

    在Java编程中,"生产者-消费者"模型是一种常见的多线程问题,它涉及到进程间的同步与通信。在这个模型中,生产者线程负责生成数据并放入缓冲区,而消费者线程则负责从缓冲区取出数据进行处理。这里的"车库"例子就是...

Global site tag (gtag.js) - Google Analytics