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

生产者消费者代码--线程同步总结

    博客分类:
  • Java
阅读更多

 

1.线程/进程的概念

2.创建和启动线程的方式

3常用方法:

    sleep()

    jion()

    yield()

    wait()

    notify()

    notifyAll()

4.synchronized

 

 

 

 

/**
 * 生产者消费者(以生产汽车 ,销售汽车为例)
 * 
 * @author Solarisy
 * 
 */
public class TestProducerConsumer {

	public static void main(String[] args) {
		WareHouse wh = new WareHouse();
		Producer per = new Producer(wh);
		Consumer cer = new Consumer(wh);

		new Thread(per).start();
		new Thread(cer).start();
	}

}

/**
 * 汽车
 * 
 * @author Solarisy
 * 
 */
class Car {
	/* 汽车编号 */
	private int id;

	Car(int id) {
		this.id = id;
	}

	public String toString() {
		return "" + id;
	}
}

/**
 * 大商店
 * 
 * @author Administrator
 * 
 */
class WareHouse {
	/* 存放汽车的车库 */
	Car[] carport = new Car[6];
	/* 车位号 */
	int index;

	/**
	 * 生产一辆汽车,将汽车停入车位 
	 * 同步方法
	 * 
	 * @param car
	 */
	public synchronized void in(Car car) throws Exception {
		while (index == 6) {
			System.out.println("车位满了,生产等待中......");
			this.wait();
		}

		carport[index] = car;
		System.out.println("The car was produce that id is :" + car
				+ " 放入车位 = " + index);
		this.notify();
		index++;
	}

	/**
	 * 销售一辆汽车,将汽车开车车位 
	 * 同步方法
	 * 
	 */
	public synchronized Car out() throws Exception {
		while (index <= 0) {
			System.out.println("车库空了。‘有钱竟然买不到汽车,我回家等着......’");
			this.wait();
		}
		index--;
		System.out.println( carport[index] + "号汽车被顾客买走了...");
		this.notify();
		return carport[index];
	}
}

/**
 * 生产者
 * 
 * @author Solarisy
 * 
 */
class Producer implements Runnable {
	WareHouse wh;

	Producer(WareHouse wh) {
		this.wh = wh;
	}

	/* 生产汽车 */
	public void produce() throws Exception {
		for (int i = 0; i < 20; i++) {
			Car car = new Car(i);
			wh.in(car);
		}
	}

	public void run() {
		try {
			produce();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

/**
 * 消费者
 * 
 * @author Solarisy
 * 
 */
class Consumer implements Runnable {
	WareHouse wh;

	Consumer(WareHouse wh) {
		this.wh = wh;
	}

	/* 买车 */
	public void buy() throws Exception {
		for (int i = 0; i < 20; i++) {
			wh.out();
		}
	}

	public void run() {
		try {
			buy();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

 

分享到:
评论

相关推荐

    多线程代码 经典线程同步互斥问题 生产者消费者问题

    a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题

    用多线程同步方法解决生产者-消费者问题

    生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...

    多进程同步解决生产者消费者问题(c++源码)

    ### 多进程同步解决生产者消费者问题(C++源码解析) #### 一、问题背景与定义 生产者-消费者问题是一种经典的并发编程问题,它最初由Edsger Dijkstra提出,用来展示信号量机制的应用场景。在这个问题中,存在两类...

    进程同步与互斥 生产者与消费者问题--操作系统大作业

    生产者-消费者问题是一个经典的进程同步问题,涉及到两个进程(或线程)——生产者和消费者。生产者负责生产数据项并将其放入一个共享缓冲区,而消费者则从这个缓冲区中取出数据项进行处理。为了保证正确性,需要...

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

    在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...

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

    9. **测试与调试**:多线程问题往往难以复现,因此在编写生产者-消费者代码时,应编写充分的测试用例,包括边界情况,如缓冲区满和空的状态转换。 通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者...

    编程实现生产者消费者或读写者的同步问题

    本文将详细介绍如何通过编程方式解决生产者消费者问题,这是一个经典的多线程同步问题。在本例中,我们将采用C++语言结合Windows API来实现。该示例程序展示了如何在同一个进程地址空间内,让多个线程(生产者线程与...

    线程同步--生产者消费者问题

    在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...

    多线程同步方法解决生产者-消费者问题(linux线程实现)

    即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码. .c文件是用vi编辑器写的,utf-8和gb...

    生产者消费者的c++代码实现

    7. 线程同步:通过使用信号量机制来实现生产者消费者问题的同步,使得线程之间的访问顺序变得有序。 本代码实现了生产者消费者问题的同步,使用信号量机制来控制线程之间的访问顺序,防止多个线程同时访问共享资源...

    多进程同步-生产者消费者模式-C实现

    生产者消费者模式基于操作系统提供的信号量(Semaphore)或管程(Monitor)等机制,以解决进程间的通信和同步问题。在这个模式中,生产者进程负责生成数据并放入缓冲区,而消费者进程则负责从缓冲区取出数据进行处理...

    生产者消费者代码(C++版)

    在多线程编程中,"生产者-消费者"模型是一个经典的并发问题,它涉及到了如何在多个线程间共享资源并协同工作。本示例是使用C++实现的一个解决方案,结合了Posix信号量和互斥量来确保线程安全和同步。 生产者-消费者...

    生产者与消费者实验代码

    生产者-消费者问题是一个经典的多线程同步问题,在计算机科学领域中,主要用于研究如何在多个线程之间进行协调工作的问题。该实验旨在通过编程实现生产者与消费者的逻辑,了解进程间的互斥访问机制以及临界区的概念...

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

    创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue&lt;String&gt; queue; public Producer(BlockingQueue&lt;String&gt; queue) { this....

    C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

    生产者-消费者模式是一种典型的多线程同步问题,一个或多个生产者线程生成数据,一个或多个消费者线程消耗这些数据。在此模式中,通常使用队列作为缓冲区,同时利用互斥量和条件变量来同步生产者和消费者的动作。 ...

    用多进程同步方法演示“生产者-消费者”问题

    1、设计目的:通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为1-20个整数。 3、设计要求: 生产者和消费者进程的数目不固定,可...

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

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

    消费者与生产者 消费者与生产者 操作系统实验代码

    根据给定的文件信息,我们可以总结出以下关于“消费者与生产者”模型在操作系统中的实现相关的知识点: ### 1. 概述 “消费者与生产者”问题是一种经典的多线程编程模型,常用于解决资源有限制条件下的共享数据...

Global site tag (gtag.js) - Google Analytics