Java多线程同步——生产者消费者问题
2014-05-20 11:03
281 查看
这是马士兵老师的Java视频教程里的一个生产者消费者问题的模型
[java]
view plaincopy
public class ProduceConsumer{
public static void main(String[] args){
SyncStack ss = new SyncStack();
Producer pro = new Producer(ss);
Consumer con = new Consumer(ss);
new Thread(pro).start();
new Thread(con).start();
}
}
class Product{
int id;
public Product(int id){
this.id = id;
}
public String toString(){
return "Product:" + id;
}
}
class SyncStack{
int index = 0;
Product[] arrPro = new Product[6];
public synchronized void push(Product p){
while (index == arrPro.length){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
arrPro[index] = p;
index++;
}
public synchronized Product pop(){
while (index == 0){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
index--;
return arrPro[index];
}
}
class Producer implements Runnable{
SyncStack ss = null;
public Producer(SyncStack ss){ //持有SyncStack的一个引用
this.ss = ss;
}
@Override
public void run() {
for(int i=0; i<20; i++){
Product p = new Product(i);
ss.push(p);
System.out.println("生产了:" + p);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
SyncStack ss = null;
public Consumer(SyncStack ss){ //持有SyncStack的一个引用
this.ss = ss;
}
@Override
public void run() {
for(int i=0; i<20; i++){
Product p = ss.pop();
System.out.println("消费了:" + p);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
[java]
view plaincopy
public class ProduceConsumer{
public static void main(String[] args){
SyncStack ss = new SyncStack();
Producer pro = new Producer(ss);
Consumer con = new Consumer(ss);
new Thread(pro).start();
new Thread(con).start();
}
}
class Product{
int id;
public Product(int id){
this.id = id;
}
public String toString(){
return "Product:" + id;
}
}
class SyncStack{
int index = 0;
Product[] arrPro = new Product[6];
public synchronized void push(Product p){
while (index == arrPro.length){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
arrPro[index] = p;
index++;
}
public synchronized Product pop(){
while (index == 0){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
index--;
return arrPro[index];
}
}
class Producer implements Runnable{
SyncStack ss = null;
public Producer(SyncStack ss){ //持有SyncStack的一个引用
this.ss = ss;
}
@Override
public void run() {
for(int i=0; i<20; i++){
Product p = new Product(i);
ss.push(p);
System.out.println("生产了:" + p);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
SyncStack ss = null;
public Consumer(SyncStack ss){ //持有SyncStack的一个引用
this.ss = ss;
}
@Override
public void run() {
for(int i=0; i<20; i++){
Product p = ss.pop();
System.out.println("消费了:" + p);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相关文章推荐
- java多线程同步:生产者与消费者问题
- java实现 生产者和消费者问题 多线程同步示例
- java多线程同步问题(生产者和消费者)典型例子
- Java多线程同步——生产者消费者问题
- Java多线程同步——生产者消费者问题
- java 线程同步问题之生产者消费者问题
- java生产者 消费者问题
- Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
- 生产者与消费者问题Java实现
- java生产者消费者问题(线程同步与线程等待的应用)
- 生产者/消费者问题的多种Java实现方式
- 生产者-消费者问题(condition)Java实现
- java多线程之生产者与消费者问题的简单模拟
- 由生产者/消费者问题看JAVA多线程
- 用JAVA 实现“生产者-消费者”问题
- 用JAVA 实现“生产者-消费者”问题
- JAVA多线程实例(生产者与消费者问题)
- 生产者消费者问题之Java线程实现
- 由生产者/消费者问题看JAVA多线程
- java 多线程同步/ 消费者生产者问题.