<div class="iteye-blog-content-contain" style="font-size: 14px">编写一段生产者/消费者的Java代码,其中生产者每次生产1个0到1000之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行。要求生产者、消费者均使用线程来实现。</div>
<div class="iteye-blog-content-contain" style="font-size: 14px">/*@src http://eric-619.iteye.com/blog/693681
* 生产者消费者问题其含义就是先生产出了产品,才能拉出去让消费者购买
* 一、重点:
* 1、多个线程数据共享区域化思想!---源于多线程的近亲思想!!(类似于静态变量的改变)
* (如栈内存和对内存,还有当做栈内存和堆内存,如数组和基本数据类型,只要是访问的同一个。)
* 2、生产者消费者
*
* 二、synchronized加锁:
*
*/
public class ProCon{ //主方法
public static void main(String[] args){
SyncStack stack = new SyncStack();
Consumer p = new Consumer(stack);
Producer c = new Producer(stack);
new Thread(p).start();
new Thread(c).start();
}
}
class Producer implements Runnable{ //生产者
private SyncStack stack;
public Producer(SyncStack stack){
this.stack = stack;
}
public void run(){
for (int i = 0; i < stack.pro().length; i++){
String product = "产品"+i;
stack.push(product);
System.out.println("生产了: "+product);
try{
Thread.sleep(200);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{ //消费者
private SyncStack stack;
public Consumer(SyncStack stack) {
this.stack = stack;
}
public void run(){
for(int i = 0; i < stack.pro().length; i++){
String product = stack.pop();
System.out.println("消费了: "+product);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class SyncStack{ // 此类是(本质上:共同访问的)共享数据区域
private String[] str = new String[10];
private int index;
public synchronized void push(String sst){ //供生产者调用
if(index == sst.length()){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify(); //唤醒在此对象监视器上等待的单个线程
str[index] = sst;
index++;
}
public synchronized String pop(){ //供消费者调用
if(index == 0){
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
notify();
index--;
String product = str[index];
return product;
}
public String[] pro(){ //就是定义一个返回值为数组的方法,返回的是一个String[]引用
return str; //这是一个String[]引用
}
} </div>
分享到:
相关推荐
蓝桥杯scratch图形化比赛训练编程题源程序88个蓝桥杯scratch图形化比赛训练编程题源程序88个蓝桥杯scratch图形化比赛训练编程题源程序88个蓝桥杯scratch图形化比赛训练编程题源程序88个蓝桥杯scratch图形化比赛训练...
最新 JAVA 编程题全集 50 题及答案 JAVA 是一种广泛使用的编程语言,具有跨平台、面向对象、简单易学等特点。本资源汇集了 50 个 JAVA 编程题目,涵盖了 JAVA 基础知识、数据结构、算法、面向对象编程等方面的内容...
### JAVA编程题全集知识点详解 #### 题目一:屏幕输出“你好!” - **知识点概述**:本题目主要考察的是Java的基本语法结构,包括如何定义一个类、类中的主方法`main`以及如何使用`System.out.print()`或`System....
本题库共包含100道C语言编程题目,涵盖了各种类型的编程题,包括数组、函数、字符串处理等。下面是对每道题的详细解释和知识点总结: 第1题 函数fun的功能是将低于平均分的人作为函数值返回,将低于平均分的分数...
JAVA 编程题全集知识点总结 本资源提供了一个完整的 JAVA 编程题全集,涵盖了大量的题目和经典的解法,非常适合刷学完基础、刷题前的知识总结与开拓。以下是从资源中提取的重要知识点: 1. JAVA 基础知识:资源中...
课后编程题是巩固理论知识和实践技能的重要环节。下面,我们将详细探讨第二章课后编程题可能涵盖的知识点以及解题思路。 1. 统计基础:编程题可能涉及到统计学的基本概念,如均值、方差、标准差等统计量的计算,...
这份"50道Java常见编程题(有精力的同学看看).rar"压缩包文件提供了学习者一个宝贵的资源,涵盖了Java的基础编程练习,旨在帮助他们巩固基础知识并提升编程技能。 在Java的世界里,面向对象编程(Object-Oriented ...
这18道必做编程题涵盖了数据结构的主要类型和操作,包括数组、链表、栈、队列、树、图等,旨在帮助你深入理解和应用这些概念。 1. **数组**:数组是最基本的数据结构,用于存储同类型的元素序列。编程题可能涉及...
【C Primer Plus 编程题答案】涉及到C语言的基础编程概念和控制语句,包括数组、循环、嵌套循环、用户输入以及字符处理等。以下是对这些知识点的详细解释: 1. **数组**:在C语言中,数组是一种数据结构,可以存储...
在JAVA语言程序设计基础篇中,编程题是学习过程中至关重要的一环。这些题目旨在帮助初学者巩固基础知识,理解和掌握JAVA编程的基本概念、语法结构以及常用数据类型和控制结构。本资料集包含了对这些基础编程题目的...
这份"最新JAVA编程题全集(包答案)"显然是一份极佳的学习资源,涵盖了广泛的Java编程概念和技术。让我们深入探讨一下这个压缩包可能包含的知识点。 1. **基础语法**:题目可能会涵盖基本的Java语法,如变量声明、...
本主题聚焦于“华为DatacomIE编程题 思路脑图”,这是一个帮助学习者理解和掌握华为网络设备编程的重要资源。虽然描述中提到这个脑图仅包含思路而无具体的命令,但对于准备华为DatacomIE认证考试或提升网络编程技能...
《第十届蓝桥杯大赛青少年创意编程Scratch组国赛编程题》是一个针对青少年编程爱好者的重要赛事资源包,其中包含了历年来蓝桥杯大赛Scratch组的国赛编程题目。Scratch是麻省理工学院(MIT)媒体实验室“终身幼儿园...
Java作为一门广泛使用的编程语言,其经典编程题的掌握对于开发者来说至关重要,无论是为了日常工作中的问题解决,还是准备面试,都是提升自身技能的有效途径。这个压缩包“Java经典编程题汇总”显然是一份宝贵的资源...
在本资源中,我们聚焦于Java语言设计的基础篇——第八版的第四章编程题解答。这一部分的内容旨在帮助读者深入理解和应用Java编程的基本概念。Java作为一种广泛应用的面向对象的编程语言,其基础知识对于任何想从事...
《C语言编程题及参考源程序》 C语言是一种强大的、通用的编程语言,它以其简洁的语法和高效的性能在编程领域占据着重要的位置。本资料包“c语言编程题及参考源程序”旨在帮助学习者提升C语言编程技能,通过一系列的...
本资源“java语言程序设计课后编程题答案答案”聚焦于Java编程的基础篇,提供了课后练习题的解决方案,帮助学习者巩固所学知识,提升编程技能。 Java编程题通常涵盖以下几个核心领域: 1. **基本语法**:包括变量...
Java 编程题全集(100 题) 本资源摘要信息涵盖了 Java 编程的基础语法、线程练习和经典编程程序,涵盖了字符串拼接、类的创建、线程练习、经典编程程序等多方面的知识点。 基础语法 1. Java 程序设计总复习题 1:...
C++经典编程题;C++经典编程题;C++经典编程题;C++经典编程题
《C++趣味编程题》是一份集合了多个有趣编程挑战的文档,主要针对C++语言进行设计。这些题目旨在帮助学习者提升C++编程技能,同时增加编程的乐趣。本题库涵盖不同难度级别的问题,适合不同程度的C++学习者。 在提供...