`
http_url
  • 浏览: 46222 次
  • 性别: 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 解决线程同步问题

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

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

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

    设计在同一个进程地址空间内执行...生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费者线程释放出一个空缓冲区;消费者线程消费物品时,若无满的缓冲区,消费者线程将被阻塞,直到新的物品被生产出来。

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

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

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

    本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能

    操作系统课设用多进程同步方法演示“生产者-消费者”问题

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

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

    1.每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前指针位置和生产者/消费者线程的标识符; 2.生产者和消费者各有两个以上; 3.多个生产者或多个消费者之间须共享对缓冲区进行...

    生产者消费者问题代码

    生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中...

    操作系统课程设计生产者和消费者问题源代码

    (1)创建生产者和消费者线程 在Windows2000环境下,创建一个控制台进程,在此进程中创建n个线程来模拟生产者或者消费者。这些线程的信息由本程序定义的“测试用例文件”中予以指定。 该文件的格式和含义如下: 3 1 ...

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

    1、设计目的:通过研究Linux的进程同步机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有26个存储单元,放入取出的产品设定为26个大写英文字母。 3、设计要求: 1) 生产者与消费者均有二个...

    电子科大操作系统课程报告信号量哲学家就餐,生产者消费者实验_信号量生产者消费者pv完整代码

    课程完整报告 实现哲学家就餐问题 1)熟悉Ubuntu系统环境和...生产者和消费者之间必须保持同步原则:不允许消费者进程到一个空缓冲区去取产品;也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。

    生产消费者的同步问题源代码

    用同步对象、自定义计数信号量等四种方法实现生产者消费者共享有限缓冲区问题Vc++源代码。问题描述:一些生产者线程各自找出自己要搜索的范围内的素数,并放到一个有限缓冲区——数组中,另一些消费者线程线程将数组...

    vs2010 c#控制台 线程实现生产者消费者问题

    绝对好用!福利到了,一分就送 部分代码Console.WriteLine("Please enter how many proceducer:");...生产者,消费者,缓冲池,执行次数都可以自定义个数。。整个程序体现了线程的同步与互斥。。。

    多线程不同步读写共享资源代码

    多线程不同步读写共享资源 文章配套代码 我在很早的时候就听说多线程不同步是可以...写线程判断条件 if(下一个指针==读线程指针) 其实这就是一简单的生产者与消费者问题。 以下是实现方法 共享资源 我使用循环缓冲区

    线程同步Java代码(生成者消费者问题)

    为了保护数据,使得两个线程互斥访问临界资源。 本代码根据生成者消费者问题,编写java线程同步代码。

    C++实现多线程生产者消费者

    使用MFC相关的功能函数来模拟经典进程互斥和同步问题

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

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

    生产者消费者问题的一般代码解决

    生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和...

    用多线程同步方法解决读者写者问

    用多线程同步方法解决读者写者问题(Reader-Writer Problem) ,设有20个连续的存储单元,写入/读出的数据项设定为1~20这20个字符。 要求; (1) 每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前...

Global site tag (gtag.js) - Google Analytics