`

java 多线程 生产者和消费者问题

 
阅读更多

 

用一个数据来表示数据存储空间

 

package com.yan.test;

public class SyncStack {

	private  int index = 0;

	private char[] stack = new char[6];

	public synchronized void push(char temp) {

		if (index == stack.length) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notify();
		stack[index] = temp;
		index++;

		System.out.println(Thread.currentThread().getName() + " push " + temp);

	}

	public synchronized char pop() {

		if (index == 0) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notify();

		index--;
		System.out.println("___" + Thread.currentThread().getName() + " ---pop " + stack[index]);
		return stack[index];

	}
}

 

 

生产者

 

 

package com.yan.test;

public class Produce implements Runnable {

	private SyncStack stack;

	int i = 0;

	public Produce(SyncStack stack) {
		super();
		this.stack = stack;
	}

	public void run() {

		while (true) {

			synchronized (this) {

				if (i < 28) {
					stack.push((char) ((char) i + 'A'));
					i++;
					
				} else {
					break;
				}
				
			}

		}

	}
}

 

消费者

 

 

 

package com.yan.test;

public class Consumer implements Runnable {

	private SyncStack stack;

	int i = 0;

	public Consumer(SyncStack stack) {
		super();
		this.stack = stack;
	}

	public void run() {

		while (true) {

			synchronized (this) {
				if (i < 28) {
					stack.pop();
					i++;
				} else {
					break;
				}
			}

		}

	}

}

 

 

 

测试的main方法

 

package com.yan.test;

public class TestSysn {

	public static void main(String[] args) {
		SyncStack s = new SyncStack();
		Produce p = new Produce(s);

		Consumer c = new Consumer(s);
		Thread t1 = new Thread(p);
		t1.setName("product1");
		Thread t3 = new Thread(p);
		t3.setName("product2");
		Thread t5 = new Thread(p);
		t5.setName("product3");
		t3.start();
		t1.start();
		t5.start();
		
		
		Thread t2 = new Thread(c);
		t2.setName("Consumer1");
		Thread t4 = new Thread(c);
		t4.setName("Consumer2");
	
		t2.start();
		t4.start();

	}

}

 

结果

product2 push A
product1 push B
product2 push C
product1 push D
product2 push E
product1 push F
___Consumer1 ---pop F
product2 push G
___Consumer1 ---pop G
___Consumer1 ---pop E
___Consumer1 ---pop D
___Consumer1 ---pop C
___Consumer1 ---pop B
___Consumer1 ---pop A
product1 push H
___Consumer1 ---pop H
product3 push I
___Consumer1 ---pop I
product2 push J
___Consumer1 ---pop J
product1 push K
___Consumer1 ---pop K
product3 push L
___Consumer1 ---pop L
product2 push M
___Consumer1 ---pop M
product1 push N
___Consumer2 ---pop N
product3 push O
___Consumer1 ---pop O
product2 push P
___Consumer2 ---pop P
product1 push Q
___Consumer1 ---pop Q
product3 push R
___Consumer2 ---pop R
product2 push S
___Consumer1 ---pop S
product1 push T
___Consumer2 ---pop T
product3 push U
___Consumer1 ---pop U
product2 push V
___Consumer2 ---pop V
product1 push W
___Consumer1 ---pop W
product3 push X
___Consumer2 ---pop X
product2 push Y
___Consumer1 ---pop Y
product1 push Z
product3 push [
___Consumer2 ---pop [
product2 push \
___Consumer1 ---pop \
___Consumer2 ---pop Z

 

 

 

 

0
0
分享到:
评论

相关推荐

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

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

    Java多线程实现生产者消费者

    本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    Java多线程 生产者-消费者模式

    总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    java多线程(生产者与消费者)

    生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...

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

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

    java多线程实现生产者消费者关系

    在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    由生产者/消费者问题看JAVA多线程

    ### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...

    java 多线程 生产者消费者模式源码

    java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...

    java多线程生产者与消费者案例

    关于java多线程的东西,里面有生产者与消费者的案例,感兴趣的朋友看一下吧。

    生产者和消费者模式多线程

    生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...

Global site tag (gtag.js) - Google Analytics