线程同步之生产者与消费者

public class Customer extends Thread{
private Queue q;
public Customer(Queue q){
this.q = q;
}

public void run(){
for(int i = 0; i < 10; i++){
int value = q.get();
}
}
}
public class Producer extends Thread{
private Queue q;
public Producer(Queue q){
this.q = q;
}

public void run(){
for(int i = 0; i < 10; i++){
q.put(i);

}
}
}
public class Queue {
int value;
boolean bFull = false;

synchronized public void put(int i){
if(bFull == false){
value = i;
bFull = true;
System.out.println("producer put " + i);
notify();
}
try{
wait();
}catch(Exception e){
e.printStackTrace();
}

}

synchronized public int get(){
if(bFull == false){
try{
wait();
}catch(Exception e){
e.printStackTrace();
}
}
bFull = false;
System.out.println("customer get " + value);
notify();
return value;
}
}
public class TestMain {

/**
* @param args
*/
public static void main(String[] args) {
Queue q = new Queue();
Producer p = new Producer(q);
Customer c = new Customer(q);
p.start();
c.start();
}

}

时间: 2024-10-15 01:27:56

线程同步之生产者与消费者的相关文章

linux中的线程同步:生产者、消费者问题

#include <stdio.h> #include <semaphore.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #define BUFFER_COUNT 5 int Buffer[BUFFER_COUNT]; //指针数组 int front = 0; int tail = 0; sem_t SemProd; sem_t SemCon; void* pr

Java线程同步模型-生产者与消费者

Java生产者与消费者模型是经典Java线程同步模型,涉及使用同步锁控制生产者线程和消费者线程同步运行问题.同步对象是仓库资源,生产者线程生产向仓库中生产商品,消费者线程从仓库中消费商品,当生产者线程生产的商品达到仓库的90%时,生产者线程停止生产并通知消费者线程开始消费,当消费者线程消耗到仓库的10%时,消费者线程停止消费并通知生产者线程恢复生产,如此循环往复过程. 如下图解: T1时刻分析 T2时刻 T3时刻 T4时刻 上图的分析,T3同T1时刻相同场景,T2同T2时刻相同场景,程序如此循环

Java经典线程同步问题------生产者与消费者

先上代码 class Test { public static void main(String []args) { Queue q=new Queue(); Producer p=new Producer(q); Consumer c=new Consumer(q); p.start(); c.start(); } } class Producer extends Thread { Queue q; Producer(Queue q) { this.q=q; } public void run

线程同步之生产者消费者

前言: 前面因时间关系,未将“生产者消费者问题”实例的介绍发布在博客随笔中,故本文作为对之前“多线程”一文的补充.概念: 生产者消费者问题(Bounded-buffer problem),是一个多线程同步问题的经典案例.这个案例中主要实现的是两个角色协同对同一资源进行访问.生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程.与此同时,消费者也在缓冲区消耗这些数据.该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据. 设计:本博客前面关于多线程的文

JAVA线程通信之生产者与消费者

package cn.test.hf.test3; import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock; public class FactoryUtils { private Resource resource; private int producerId = 1; // 可重入锁 ReentrantLock lock = new ReentrantLock()

同步函数 生产者和消费者模式 加强版(多人生产和多人消费)

曾经搞了半天, 生产者和消费者模式  加强版(多人生产 多人消费 ).. 以前的代码格式就不再吐槽了(以后努力改进) //输出结果是一个无限循环 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 多个生产者&多个消费者模式 * 多个生产者不断生产,多个消费者不停的消费

JAVA_线程同步_生产者消费者问题

1 public class ProducerConsumer { 2 public static void main(String[] args) { 3 SyncStack ss = new SyncStack(); 4 Producer p = new Producer(ss); 5 Consumer c = new Consumer(ss); 6 new Thread(p).start(); 7 new Thread(p).start(); 8 new Thread(p).start()

线程操作之生产者及消费者

范例:Info.java 1 public class Info { 2 3 private String name="王sir"; 4 private String Content="JAVA讲师"; 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name = name; 10 } 11 public String getCont

线程通信(生产者与消费者问题)

1.线程通信的必要性 多线程不仅共享资源,而且相互牵制向前运行. 2.线程通信的方法(都是在Object中定义) 3个方法: 1)    wait() 可运行转入阻塞状态,放锁 2)    notify() 阻塞转入可运行状态,获得锁 3)    notifyAll() 所有调用wait方法而被挂起的线程重新启动,有个条件:wait与notifyAll必须是属于同一个对象 必须在同步方法或同步代码块中使用 3.共享资源类(仓库) 注:共享资源(产品),牵制信息(产品有无)  package co