`
CoolJava86
  • 浏览: 32436 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

[多线程]-[机试题]-[生产者&消费者]

阅读更多
//自己的栈
class MyStack{
	int[] max = null;
	int index = 0;
	public MyStack(int m){
		max = new int[m];
	}
	public synchronized void push(int param){
		//必须用while,被叫醒后,再检查一次
		while(index>=max.length){
			try {
				System.out.println("栈已满 生产者WAIT===========================");
				this.wait();
				System.out.println("生产者 被notify");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notifyAll();
		max[index] = param;
		index ++ ;
	}
	public synchronized int pop(){
		//必须用while,被叫醒后,再检查一次
		while(index<=0){
			try {
				System.out.println("栈已空 消费者WAIT===========================");
				this.wait();
				System.out.println("消费者 被notify");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notifyAll();
		index --;
		return max[index];
	}
}
//生产者
class Producer implements Runnable{
	MyStack myStack = null;
	int count;
	public Producer(MyStack ms,int count){
		myStack = ms;
		this.count = count;
	}
	public void run(){
		for(int i=1;i<=myStack.max.length;i++){
			myStack.push(i);
			System.out.println("第"+count+"个生产者,第"+i+"次生产:"+i);
			try {
				Thread.sleep((int)(Math.random()*300));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
//消费者
class Consumer implements Runnable{
	MyStack myStack = null;
	int count;
	int i;
	public Consumer(MyStack ms,int count){
		myStack = ms;
		this.count = count;
	}
	public void run(){
		for(int i=1;i<=myStack.max.length;i++){
			int x = myStack.pop();
			System.out.println("第"+count+"个消费者,第"+i+"次消费:"+x);
			try {
				Thread.sleep((int)(Math.random()*300));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
//测试类
public class ProducerConsumerTest {

	public static void main(String[] args) {
		MyStack ms = new MyStack(10);
		Thread p1 = new Thread(new Producer(ms,1));
		Thread p2 = new Thread(new Producer(ms,2));
		Thread p3 = new Thread(new Producer(ms,3));
		Thread c1 = new Thread(new Consumer(ms,1));
		Thread c2 = new Thread(new Consumer(ms,2));
		p1.start();
		p2.start();
		p3.start();
		c1.start();
		c2.start();
	}
}
分享到:
评论

相关推荐

    Linux线程编程之生产者消费者问题

    Linux线程编程中的生产者消费者问题是多线程编程中一个经典的同步问题,它涉及到线程间的协作和资源的共享。生产者线程负责生成数据并放入队列,而消费者线程则从队列中取出数据进行处理。在这个过程中,如何保证...

    JAVA技能鉴定试题大全.pdf

    Java 技能鉴定试题涉及到的核心知识点包括生产者-消费者模式、XML文件解析、Java集合框架的使用、多线程编程以及数据排序。下面将详细解释这些知识点: 1. **生产者-消费者模式**:这是一种多线程设计模式,用于...

    蚂蚁金服上机试题.docx

    生产者消费者问题是一个经典的多线程编程应用场景。试题要求设计一个程序,模拟生产者和消费者之间的交互过程。在实际编程中,需要考虑线程同步机制,以防止数据竞争和不一致的问题。同时,异常处理也是多线程编程中...

    百度2014校园招聘笔试试题-技术类软件研发.doc

    在2014年百度的校园招聘中,技术类软件研发岗位的笔试题目主要考察了应聘者的Java虚拟机(JVM)理解、Servlet生命周期、volatile关键字的掌握以及生产者消费者模型的编程实现等核心知识点。下面将对这些关键点进行...

    JAVA技能鉴定试题大全[归纳].pdf

    生产者-消费者模式是一种多线程同步问题的经典解决方案。在这个模式中,生产者负责创建资源,然后放入共享的缓冲区,而消费者则从缓冲区取出资源进行消费。在Java中,可以使用`java.util.concurrent`包下的`...

    黄淮学院信工学院操作系统06-07下考试试题A卷答案

    3. **生产者消费者问题**:最后一道应用题描述了经典的生产者消费者问题,通过信号量机制实现了线程间的同步和互斥,确保了数据的正确性和一致性。 综上所述,操作系统作为计算机科学的重要组成部分,其理论和实践...

    Java期末试题有答案

    例如,设计一个生产者消费者模型的程序。 七、泛型 泛型是Java 5引入的新特性,用于提供类型安全。考生需要理解泛型类、泛型方法和通配符的使用。例如,可能会设计一个泛型队列并实现其基本操作。 八、反射机制 ...

    2021-2022计算机二级等级考试试题及答案No.10531.docx

    - 解决线程间通信问题通常涉及同步机制,如锁、信号量、生产者-消费者模式等。 - 可以使用互斥锁(mutex)、条件变量(condition variable)、队列(queue)等工具来确保线程安全的数据共享和通信。 - 此外,还可以利用...

    一般测试题.rar

    3. **线程通信**:如生产者-消费者模型,线程间的信号传递(如Java的wait()、notify()和notifyAll()方法)。 4. **线程优先级**:了解线程调度算法和优先级对程序执行的影响。 5. **线程安全**:识别和解决线程不...

    操作系统考研计算题总结

    2. 生产者消费者问题:这是一个经典的多线程同步问题,描述了生产者进程生成数据,消费者进程消耗数据的场景。解决此问题通常采用缓冲区,限制生产者和消费者的并发访问。信号量可以用来管理缓冲区的满与空状态,...

    2019年7月操作系统考试试题(山东大学计算机学院)

    * 生产者消费者问题:是一个经典的多进程同步问题,生产者产生数据,消费者消费数据,需要使用同步机制来避免僵死。 * 伪代码实现:可以使用信号量或互斥锁来实现生产者消费者问题的解决方案。 六、死锁避免和死锁...

    ITAT第四届JAVA复赛试题B卷

    在多线程编程中,参赛者需要实现生产者消费者模型,这涉及到Thread类、wait()、notify()等多线程同步方法以及并发控制。理解线程间的协作和同步机制对于编写高效、安全的多线程程序至关重要。 此外,概率计算是编程...

    Java并发编程最全面试题 123道

    13. BlockingQueue:研究阻塞队列在并发编程中的应用,如生产者消费者模型的实现。 四、并发设计模式 14. 管道模式:理解如何使用PipedInputStream和PipedOutputStream实现线程间的通信。 15. 线程池设计:学习如何...

    黄淮学院计算机操作系统(信工学院)05本科B卷试题答案

    2. **生产者-消费者问题**:这是一个典型的多线程同步问题,通过信号量机制来实现生产者和消费者之间的同步,确保数据的一致性和完整性。 ### 三、死锁分析 1. **死锁的概念与条件**:死锁是指两个或两个以上的...

    操作系统试题自测题02

    1. 现代操作系统采用的技术包括:微内核架构、虚拟化技术、多线程/多进程模型、分布式计算、网络协议栈、安全机制(如权限控制和访问控制列表)、内存管理优化(如分页和分段)以及用户友好的图形用户界面(GUI)等...

    2021-2022计算机二级等级考试试题及答案No.2644.docx

    管道流是专门用于线程间通信的一种特殊流,它可以在生产者线程和消费者线程之间传输数据。 #### 题目26: JDK工具 - **知识点**: JDK中包含哪些工具? - **解析**: JDK包含了多种工具,包括: - Java编译器(javac...

    计算机操作系统试题及答案e(2).doc

    4. 生产者-消费者问题是并发编程中经典的同步问题,生产者进程负责生成数据,消费者进程负责消费数据。通过信号量或条件变量等同步机制,可以实现生产者与消费者间的数据安全交换,避免数据竞争和死锁等问题。

    2016年南京航空航天大学考研初试计算机专业课真题

    10. 生产者-消费者问题:生产者-消费者问题是一个经典的同步问题,涉及多个进程或线程对共享资源的访问。通过使用P和V操作(也称作wait和signal操作),可以实现对共享资源的正确管理,确保生产者不会在消费者消费...

    操作系统常见笔试题.rar

    - 同步:多个进程按一定顺序执行,如生产者-消费者问题。 - 互斥:确保同一时刻只有一个进程访问临界资源,如信号量机制、管程、自旋锁等。 4. **内存管理** - 分页和分段:内存的逻辑地址与物理地址映射,解决...

Global site tag (gtag.js) - Google Analytics